2016-04-25 28 views
-1

リストのすべての要素が特定の条件を満たすかどうかを確認する関数all' :: (a -> Bool) -> [a] -> Boolを定義する必要があります。Haskellの "all"関数を再実装するには?

たとえば、all' (<5) [1,2,3] = True,all' (>=2) [1,1,2,2,3,3] =偽です。

私の主な問題は、私がどのように関数の伝達を処理するのか分からないことです。

答えて

5

ハスケルの関数は他の値と同様に渡されます。ここでは、進行を支援するための例です:

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)= (a - > Bool) - > [a] - > Bool all '' [[]] = False すべてf(x:[])= fxの場合はTrue、それ以外の場合はFalse すべて '' f(x:xs)= fxならば全て '' fxs else False' – Andro

+0

あなたが空の場合は@kissylips配列の大文字小文字を 'True'にすると、2番目の条件を取り除くことができます。 –

+0

@kissylipsが正しいように見えます。ちょっとしたメモ: 'x:[]'は '[x]'と書くこともできます(括弧は作成とパターンマッチングリストの両方に使うことができます)。また、 'それ以外の場合はTrue else else'は常に' whatever'と同じです。また、小さなコードを置くのに適した場所はhttp://lpaste.net/です。 – PyRulez

関連する問題