【发布时间】:2014-05-11 22:06:54
【问题描述】:
我正在学习 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 地图和过滤器的区别是什么。
谢谢你,对不起我的英语!
编辑:我使用的是 tryhaskell.org,这就是问题所在!
【问题讨论】:
-
你肯定看到
[5然后什么都没有? -
我刚刚编辑,我什至没有看到 [5
-
我无法重现。我看到了
[5。 -
那没有意义。您使用的是哪个编译器/解释器?
-
可能是因为我使用的是tryhaskell.org。我将下载 Haskell 平台并在那里尝试!
标签: haskell