リストのリスト内の特定の要素の出現を削除するこの関数があります。
remove :: Eq a => a -> [[a]] -> [[a]]
remove y [] = error "Can't remove an element from an empty list"
remove y xs = map (filter(/=y)) xs
リスト内包表記を使用して同じことを行うにはどうすればよいでしょうか
ありがとうございました
リストのリスト内の特定の要素の出現を削除するこの関数があります。
remove :: Eq a => a -> [[a]] -> [[a]]
remove y [] = error "Can't remove an element from an empty list"
remove y xs = map (filter(/=y)) xs
リスト内包表記を使用して同じことを行うにはどうすればよいでしょうか
ありがとうございました
のそれぞれについて、結果のリストに追加しl
ますxs
。filter (/= xs) l
remove y xs = [filter (/= y) l | l <- xs]
または、内包表記をネストしてフィルターを削除します。for each xs
inxss
および for each x
in は、と異なる場合にのみxs
保持します。x
y
remove y xss = [ [x| x <- xs, x /= y] | xs <- xss]
練習するだけなら問題ありませんが、 を使用したバージョンのmap
方がはるかに優れています :)
私は次の行に沿って何かを推測します:
remove y ls = [f|l <- ls, let f = filter (/= y) l]
大丈夫なはずです。
l
基本的に、リストで作成できるすべてのバインディングについてls
、フィルタリングされたリストf
を結果のリストに追加することを示しています。