我正在学习Haskell,我想知道如何有一个更复杂的谓词。Haskell更复杂的谓词
例如,我可以这样做:
any (>= 5) my_list
但我不能找到一种方法如何做这样的事情:
any (x `mod` 2 == 0) my_list
我怎么能这样做?
我正在学习Haskell,我想知道如何有一个更复杂的谓词。Haskell更复杂的谓词
例如,我可以这样做:
any (>= 5) my_list
但我不能找到一种方法如何做这样的事情:
any (x `mod` 2 == 0) my_list
我怎么能这样做?
使用lambda函数:
any (\x -> x `mod` 2 == 0) my_list
对于非常复杂的东西,你最好,定义一个单独的函数。对于较小的情况下,你可以使用lambda甚至像
any predicate myList
where predicate x = even x
编辑:即使x只是一个简化。你可以把类似where predicate x = (mod x 3) == 1
我最喜欢的非平凡的案件。 – Ingo
还有在@ m0nhawk的答案使用匿名(拉姆达)功能,你可以使用函数组合:
>>> any ((==0) . (`mod` 2)) [1,2,3]
True
第三种可能性,操作部分组成,''任何(( == 0)。('mod' 2))''。当然,这个特定的例子应该是“任何偶数”。 –