簡體   English   中英

Haskell使用映射和組合函數

[英]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

這由功能lengthgroup 結果是一個函數,該函數接受一個列表(字符串)並返回該列表中的“組”數(其中組是同一字符的序列重復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)為每個串計算strt

嘗試從所有案例中刪除“ 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM