如何在Haskell中重新实现“all”函数?
问题描述:
我需要定义一个函数all' :: (a -> Bool) -> [a] -> Bool
,它验证列表中的所有元素是否满足某个条件。如何在Haskell中重新实现“all”函数?
例如:all' (<5) [1,2,3] = True
,all' (>=2) [1,1,2,2,3,3]
=假。
我的主要问题是我不知道如何处理函数的传输。
答
Haskell中的函数就像任何其他值一样传递。下面是一个例子来帮助你进步:
doBothSatisfy :: (a -> Bool) -> a -> a -> Bool
doBothSatisfy p x y = (p x) && (p y)
而现在的用法:
doBothSatisfy (> 5) 6 7 == True
doBothSatisfy (> 5) 1 8 == False
现在试图将其扩展到列表中。
谢谢你回答这么快。我的程序看起来像:** Alternative 1 **: 'all'::(a-> Bool) - > [a] - > Bool all'fct [] = True all'fct(x:xs)= (fct x)&&(all'fct xs)' ** Alternative 2 **: 'all''::(:a-> Bool) - > [a] - > Bool all''f [] = False all''f(x:[])= if fx then True else Falke all''f(x:xs)= if fx then all''f xs else False – Andro
@kissylips如果你让空数组的情况下为“真”,你可以摆脱第二种情况。 –
@kissylips看起来正确。只需注意一点:'x:[]'也可以写成'[x]'(括号可以用于制作和模式匹配列表)。另外'如果不论那么真的其他假'总是与'无论'一样。此外,放置小部分代码的好地方是http://lpaste.net/。 – PyRulez