-1
我需要定義一個函數all' :: (a -> Bool) -> [a] -> Bool
,它驗證列表中的所有元素是否滿足某個條件。如何在Haskell中重新實現「all」函數?
例如:all' (<5) [1,2,3] = True
,all' (>=2) [1,1,2,2,3,3]
=假。
我的主要問題是我不知道如何處理函數的傳輸。
我需要定義一個函數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