gpt4 book ai didi

haskell - 映射与过滤无限列表?

转载 作者:行者123 更新时间:2023-12-03 15:02:37 24 4
gpt4 key购买 nike

我正在学习 Haskell,我遇到了一些我无法理解的东西,我找不到解释。所以,我在无限列表上测试了一些函数,看看它们是如何工作的,我发现了我想理解的 map 和 filter 之间的区别。
Prelude.map定义:

map _ []     = []
map f (x:xs) = f x : map f xs
Prelude.filter定义:
filter _pred []    = []
filter pred (x:xs)
| pred x = x : filter pred xs
| otherwise = filter pred xs

如果我运行这个:
map (==5) [1..]

输出开始并且它永远不会结束,直到我停止它。 Wich 是有道理的,因为列表是无限的。

但现在如果我运行这个:
filter (==5) [1..]

我什么也没看到,甚至没有 [5, .
这也是有道理的,因为列表也是无限的,但我想了解 beetwen map 和过滤器的区别是什么。
谢谢你,对不起我的英语!

编辑:我使用的是 tryhaskell.org,这就是问题所在!

最佳答案

正如评论中所发现的,这是由于使用了 Try Haskell .从实验来看,它似乎会等待程序终止,经过 3 秒,或产生 1024 个字符的输出,然后结束并向您发送结果。不幸的是,filter (==5) [1..]只会产生微不足道的两个字符( [5 ),不符合 1024 个字符的限制,并且由于某种原因,Try Haskell 不会发送 [5回到你身边。在真正的 GHCi 中运行它应该可以正常工作。

关于haskell - 映射与过滤无限列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23598470/

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