入力nに基づいて[1..n]からすべての整数をリストするhaskellプログラムがあります。条件に基づいて特定の数値をフィルタリングし、リストとして表示したい。フィルター機能/条件はどこでどのように使用できますか?
Haskellのドキュメントによると:
filter :: (a -> Bool) -> [a] -> [a]
述語とリストに適用されるフィルターは、述語を満たす要素のリストを返します。つまり、
filter p xs = [ x | x <- xs, p x]
わかった。したがって、残りの取引は、リストの述語関数を設計することです。 xsと呼ばれるリストと述語関数pがすでにあるとすると、あなたがしなければならないのは
フィルターp xs。
多くの場合、次のように、pが匿名またはラムダ式として定義されています。
フィルター(\ n-> n `mod` 2 == 0)xs。
これは必須ではなく、名前付き関数を定義することは初心者には役立つかもしれません。
isEven n = n `mod` 2 == 0
evenListNumbers xs = filter isEven xs
evenListNumbers [1,2,3,4]
これは[2,4]です。
したがって、指定されたリストフィルターの述語関数はリスト要素を取り、ブール値を返します。これがtrueの場合、要素は保持(または結果のリストに追加)され、falseの場合は渡されます。
さて、その条件を述語(Bool
を返す関数)に変換し、それを使用して数値をフィルタリングします。
たとえば、奇数のみを選択する必要がある場合は、filter odd [1..n]
を使用できます