0

好吧,即使我知道它在做什么,我也无法弄清楚这个...

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

现在考虑三种情况:

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

这将返回以下三个答案:

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

现在,有人可以向我详细解释发生了什么。这个问题的一个关键部分是,我假设 map 需要一个列表来处理,并且例如在第三种情况下我没有看到两个 map 被传递。

4

2 回答 2

4
map (length.group) t

这组成了函数lengthgroup。结果是一个函数,它接受一个列表(字符串)并返回该列表中“组”的数量(其中组是相同字符重复 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)的每个字符串计算。strt

于 2012-10-03T13:09:25.190 回答
2

尝试length.从所有案例中删除“”,看看是否有助于回答您的问题。它会简化问题,答案可能会更好地向您展示正在发生的事情。

或者,考虑到第三个,它变成

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 回答