[英]Haskell use of map and composed function
好的,即使我知道它在做什么,我也無法弄清楚。
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 (length.group) t
這由功能length
和group
。 結果是一個函數,該函數接受一個列表(字符串)並返回該列表中的“組”數(其中組是同一字符的序列重復1次或多次,因此“ abc”包含3個組,所以“ aabbcc”)。
然后使用map
將此函數應用於t
每個字符串。
(map length.group) t
此處,函數map length
(采用列表列表中每個子列表的長度)由函數group
組成,並且將組成的函數應用於t
。 換句話說,它與map length (group t)
。
map (map length.group) t
這里的功能map length . group
map length . group
被施加到每一串t
,即, map length (group str)
為每個串計算str
在t
。
嘗試從所有案例中刪除“ 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以外的任何東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.