0

わかりました、これが何をしているのかはわかっていても、これを理解することはできません...

let t = ["APE", "MONKEY", "DONKEY"]

ここで、次の 3 つのケースを考えてみましょう。

map (length.group) t
(map length.group) t
map (map length.group) t

これにより、次の 3 つの回答が返されます。

[3,6,6]
[1,1,1]
[[1,1,1],[1,1,1,1,1,1],[1,1,1,1,1,1]]

さて、誰かが私に何が起こっているのかを詳しく説明してくれませんか. この質問の重要な部分は、マップには作業するリストが必要であり、たとえば3番目のケースで2つのマップが渡されるとは思わないということです。

4

2 に答える 2

4
map (length.group) t

これにより、関数lengthとが構成されますgroup。結果は、リスト (文字列) を受け取り、そのリスト内の「グループ」の数を返す関数です (グループとは、1 回以上繰り返される同じ文字のシーケンスであるため、「abc」には 3 つのグループが含まれているため、 "aabbcc")。

次に、この関数がtusingの各文字列に適用されますmap

(map length.group) t

ここで、関数map length(リストのリスト内の各サブリストの長さを取る) が関数groupで合成され、合成された関数が に適用されtます。つまり、 と同じmap length (group t)です。

map (map length.group) t

ここで、関数map length . groupは の各文字列に適用されます。tつまりmap length (group str)、 の各文字列に対して が計算されstrますt

于 2012-10-03T13:09:25.190 に答える
2

すべてのケースから" " を削除してみて、length.それが質問への回答に役立つかどうかを確認してください。それは問題を単純化し、答えは何が起こっているのかを少し良く示すかもしれません.

または、3番目のものを因数分解すると、

map (map length.group) ["APE", "MONKEY", "DONKEY"]
--make parse order explicit
map ((map length) . group) ["APE", "MONKEY", "DONKEY"]
--do mapping
[((map length) . group) "APE", ((map length) . group) "MONKEY", ((map length) . group) "DONKEY"]
--use (f.g) x == f (g x)
[(map length) (group "APE"), ...]
[(map length) ["A", "P", "E"], ...]
[[1, 1, 1], ...]

また、「EEL」、「BEE」、「LLAMA」などの動物を使用して、最終結果で 1 以外のものを確認してみてください。

于 2012-10-03T13:11:30.887 に答える