Prelude> find odd [2,4,7,9,11]
Just 7
我预计这会返回[7,9,11],因为它们都是奇数。为什么find
返回Just 7
?为什么Haskell的查找总是只返回一个元素?
有没有什么办法可以告诉odd
函数返回我所期望的?
Prelude> find odd [2,4,7,9,11]
Just 7
我预计这会返回[7,9,11],因为它们都是奇数。为什么find
返回Just 7
?为什么Haskell的查找总是只返回一个元素?
有没有什么办法可以告诉odd
函数返回我所期望的?
使用filter
> filter odd [2,4,7,9,11]
[7, 9, 11]
您正在寻找filter
,不find
。 find
的工作是找到第一个,或让你知道没有一个。 filter
的工作是列出他们所有的人。
的
find
函数采用一个谓语和列表,并返回第一元件在列表中的谓词,或者Nothing
匹配,如果不存在这样的元件。
使用filter
代替:
> filter odd [2,4,7,9,11]
[7, 9, 11]
在这种情况下,你应该找出函数类型您的需求,然后问[hoogle(https://www.haskell.org/hoogle)。对于这个任务搜索参数是**(a - > Bool) - > [a] - > [a] **。 – ArthurVard