gpt4 book ai didi

haskell - 惰性和函数组合(haskell、erlang)

转载 作者:行者123 更新时间:2023-12-02 01:19:12 25 4
gpt4 key购买 nike

有人可以解释一下或提供一些关于函数组合如何与惰性相关的资源吗?

例如如何过滤 (/='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 产生一个无限列表,但只要只消耗有限部分,计算就会在有限时间内完成。但是,需要 10 。过滤器 (/= 'W') 。 map toUpper $repeat 'w' 不会终止,因为生成的字符都没有通过filter 到达take 10

关于haskell - 惰性和函数组合(haskell、erlang),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9032295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com