尝试在haskell列表中用“ any”实现“ all”

时间:2020-05-01 01:48:39

标签: java list haskell

我试图用“ any”实现“ all”功能,但出现错误。 我的代码:

all''' ::  (a -> Bool) -> [a] -> Bool
all''' p xs = not (any''' not (p) xs)

一本书可以正常工作的Java代码:

public boolean forAll(Function<A, Boolean> p) {
return !exists(x -> !p.apply(x));
}

我的错误:

enter image description here

我希望有人能帮助我。

亲切的问候

1 个答案:

答案 0 :(得分:3)

Haskell中的函数应用程序语法与Java中的语法不同。在Haskell中,您可以通过将函数放在参数旁边来应用该函数:

f x  -- The function f applied to x

函数应用程序关联到左侧,因此在您编写时

not (any''' not (p) xs)

编译器将any'''应用于函数not,函数p和列表xs就像您写过一样

not (((any''' not) p) xs)

你想写的是

all''' p xs = not (any''' (\x -> not (p x)) xs)

您可以使用合成运算符.将其缩短一点:

all''' p = not . any''' (not . p)

请注意,如果您还定义any'''以使用all''',那么最终将导致无限循环。也许您打算将其定义为使用“早期”版本?