我试图用“ 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));
}
我的错误:
我希望有人能帮助我。
亲切的问候
答案 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'''
,那么最终将导致无限循环。也许您打算将其定义为使用“早期”版本?