web-dev-qa-db-ja.com

Haskellでフィルター機能を使用するにはどうすればよいですか?

入力nに基づいて[1..n]からすべての整数をリストするhaskellプログラムがあります。条件に基づいて特定の数値をフィルタリングし、リストとして表示したい。フィルター機能/条件はどこでどのように使用できますか?

Haskellのドキュメントによると:

filter :: (a -> Bool) -> [a] -> [a]

述語とリストに適用されるフィルターは、述語を満たす要素のリストを返します。つまり、

filter p xs = [ x | x <- xs, p x]
16
Amjad

わかった。したがって、残りの取引は、リストの述語関数を設計することです。 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の場合は渡されます。

27
Sarah

さて、その条件を述語(Boolを返す関数)に変換し、それを使用して数値をフィルタリングします。

たとえば、奇数のみを選択する必要がある場合は、filter odd [1..n]を使用できます

2
Mihai Maruseac