2016-04-25 46 views
-1

我需要定義一個函數all' :: (a -> Bool) -> [a] -> Bool,它驗證列表中的所有元素是否滿足某個條件。如何在Haskell中重新實現「all」函數?

例如:all' (<5) [1,2,3] = Trueall' (>=2) [1,1,2,2,3,3] =假。

我的主要問題是我不知道如何處理函數的傳輸。

回答

5

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 

現在試圖將其擴展到列表中。

+1

謝謝你回答這麼快。我的程序看起來像:** 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

+0

@kissylips如果你讓空數組的情況下爲「真」,你可以擺脫第二種情況。 –

+0

@kissylips看起來正確。只需注意一點:'x:[]'也可以寫成'[x]'(括號可以用於製作和模式匹配列表)。另外'如果不論那麼真的其他假'總是與'無論'一樣。此外,放置小部分代碼的好地方是http://lpaste.net/。 – PyRulez