繁体   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