我有这个函数,它删除列表列表中某个给定元素的匹配项。
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我怎样才能使用列表理解来做同样的事情呢
谢谢
发布于 2012-05-04 19:37:56
对于xs中的每个l,将filter (/= xs) l添加到结果列表中:
remove y xs = [filter (/= y) l | l <- xs]或者,通过嵌套理解来删除过滤器。对于xss中的每个xs和xs中的每个x,仅当x不同于y时才保留它
remove y xss = [ [x| x <- xs, x /= y] | xs <- xss]如果您只是在练习,也没问题,但是您的map版本要好得多:)
发布于 2012-05-04 19:32:26
我猜大概是这样的:
 remove y ls = [f|l <- ls, let f = filter (/= y) l]应该没问题。
它的基本内容是,对于可以在列表ls中创建的每个绑定l,将过滤后的列表f添加到结果列表中。
https://stackoverflow.com/questions/10447924
复制相似问题