删除列表列表中给定元素的出现次数

时间:2012-05-04 11:27:42

标签: haskell

我有这个函数可以删除列表列表中给定元素的出现。

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

我怎样才能使用列表理解

来做同样的事情

谢谢

2 个答案:

答案 0 :(得分:5)

对于l中的每个xs,将filter (/= xs) l添加到结果列表中:

remove y xs = [filter (/= y) l | l <- xs]

或者,通过嵌套理解去除过滤器。 对于xs中的每个xss以及x中的每个xs,仅当xy不同时,请保留remove y xss = [ [x| x <- xs, x /= y] | xs <- xss]

map

如果你只是练习就没关系,但你的版本{{1}}更好:)

答案 1 :(得分:2)

我想的是:

 remove y ls = [f|l <- ls, let f = filter (/= y) l]

应该没问题。

它基本上声明,对于您可以在列表l中创建的每个绑定ls,将过滤后的列表f添加到结果列表中。