-1

リスト内包を使ってHaskellフィルタ関数の実装を記述する方法はありますか?フィルタ関数haskellの実装

エラーが表示され続けると、私はそれに近づく方法を困惑しています。これは私が持っているものです:

filter' :: (a -> Bool) -> [a] -> [a] 
filter' _ [] = [] 
filter' f xs = [f x | x <- xs] 

すべての指導やリンクをいただければ幸いです。

+2

haskellのリスト内包語の概要:https://wiki.haskell.org/List_comprehension – randomir

+1

あなたは本当に自分でこれらの質問を解決するためにもっと力を入れてください。あなたがしたのは、あなたの最後の質問であなたに与えられた 'map'実装(https://stackoverflow.com/a/46876590/5743988)からソリューションをコピーしたようです。将来的には、なぜあなたが困惑しているのかについてのあなたの思考プロセスの詳細を説明して、人々があなたをより良く助けることができるようにしてください。 – 4castle

答えて

7

はい、あなたはそれを書くことができます。

filter' :: (a -> Bool) -> [a] -> [a] 
filter' f xs = [x | x <- xs, f x]

はあなたがブール値に評価され、リストの内包表記での表現を追加する場合は、リストの内包にフィルタを追加しました:f xは、と評価された場合にのみTrueここには、xがリストに追加されます。 filter' _ [] = []を書い

注意無用です:あなたは空のリストを提供する場合xx <- xsxs外の値を選ぶことは決してありませんから、そのリスト内包表記でも、空のリストを返します。

通常、組み込みのfilter :: (a -> Bool) -> [a] -> [a]を使用することをお勧めします。