4

我正在学习 Haskell,我想知道如何有一个更复杂的谓词。

例如,我可以这样做:

 any ( >= 5 ) my_list

但我找不到如何做这样的事情:

 any (x `mod` 2  == 0) my_list

我怎么能这样做?

4

3 回答 3

5

使用 lambda 函数:

any (\x -> x `mod` 2 == 0) my_list
于 2013-06-21T17:46:43.230 回答
5

对于真正复杂的东西,你最好定义一个单独的函数。对于较小的情况,您可以使用 lambda 甚至类似的东西


    any predicate myList
            where predicate x = even x

编辑:甚至 x 只是一个简化。你可以把类似的东西where predicate x = (mod x 3) == 1

于 2013-06-21T17:50:40.900 回答
3

除了使用@m0nhawk 的答案中的匿名(lambda)函数外,您还可以使用函数组合:

>>> any ( (==0) . (`mod` 2) ) [1,2,3]
True
于 2013-07-10T10:01:31.437 回答