0

関数内のリスト位置xがどこにあるかを調べる方法があるかどうか疑問に思いましたか?

hep list = [if x=="you" then "u" else if x=="are" then "r" else x | x <- list]

何かのようなもの:

hep list = [if x=="by" && elemAt(x+1)=="the" && elemAt(x+2)=="way" then "btw" else if x=="are" then "r" else x | x <- list]
4

3 に答える 3

5

この方法で問題を解決したくない場合もありますが(リンクリストへのインデックス作成はアルゴリズムの匂いなどです)、本当にインデックスが必要な場合は、インデックスのリストに対して圧縮することで取得できます。

zip [0..] some_list

次に、この新しいリストをトラバースすると、単一の要素ではなくペアが取得されます。各ペアの最初の要素は必要なインデックスになり、2番目の要素はアイテムになります。

または、逆に(あるインデックスで要素を取得するために)どの関数を使用するかを尋ねているのではないでしょうか。そのためにあなたは使用します!!

some_list !! 5
于 2013-02-10T22:22:42.357 に答える
2

で指定されたリストを圧縮することでインデックスを取得できますが、インデックスで[0..]リストアイテムにアクセスすることは、やりたいことを行うための慣用的でも効率的な方法でもありません。

より良い解決策は、再帰とパターンマッチングを使用してリストを反復処理し、一度に複数の要素を取得することです。

于 2013-02-10T22:24:15.063 に答える
1

sepp2kの答えを拡張するには、次のようなものを試すことができます。

hep ("by" : "the" : "way" : rest) = "btw" : hep rest
hep ("are" : rest)                = "r"   : hep rest
hep (yadda : rest)                = yadda : hep rest
hep []                            = []
于 2013-02-10T22:36:06.440 に答える