簡體   English   中英

懶惰和功能組成(haskell,erlang)

[英]laziness and function composition (haskell, erlang)

有人可以解釋或提供一些關於功能組合如何與懶惰相關的資源嗎?

例如,如何filter (/='W') . map toUpper $ "justaword" filter (/='W') . map toUpper $ "justaword"在Haskell中的工作與它在erlang中的對應物相比是不是很懶惰?

每當需要另一個角色(或結束通知)時,下一個角色 - 如果有的話 - 被映射到大寫,與'W'相比,如果不相等則被傳遞。

filter (/= 'W') . map toUpper $ "justaword"
~> filter (/= 'W') (toUpper 'j' : map toUpper "ustaword")
~> filter (/= 'W') ('J' : map toUpper "ustaword")
~> 'J' : filter (/= 'W') (map toUpper "ustaword")

現在第一個字符可用,因此對於像null這樣的查詢或者像take 1這樣的函數,沒有進一步的工作。 如果消費者要求更多字符,則將逐一生成它們,直到到達字符串的末尾。

例:

Prelude Data.Char> take 10 . filter (/= 'W') . map toUpper $ repeat 't'
"TTTTTTTTTT"

repeat產生一個無限列表,但只要只消耗一個有限部分,計算就會在有限的時間內完成。 但是, take 10 . filter (/= 'W') . map toUpper $ repeat 'w' take 10 . filter (/= 'W') . map toUpper $ repeat 'w' take 10 . filter (/= 'W') . map toUpper $ repeat 'w'不會終止,因為所有生成的字符都沒有通過filter到達take 10

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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