好吧,即使我知道它在做什么,我也无法解决这个问题......
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]]
现在,有人可以向我详细解释发生了什么。这个问题的一个关键部分是我假设地图需要一个列表来处理,例如,我没有看到在第三个案例中传递了两个地图。
答案 0 :(得分:4)
map (length.group) t
这包含函数length
和group
。结果是一个函数,它接受一个列表(字符串)并返回该列表中“组”的数量(其中一个组是重复一次或多次的相同字符的序列,因此“abc”包含3个组,所以“为aabbcc”)。
然后使用t
将此函数应用于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
。
答案 1 :(得分: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之外的任何动物。