【问题标题】:How to use filter in list comprehension?如何在列表理解中使用过滤器?
【发布时间】:2017-10-25 05:45:08
【问题描述】:

所以我试图从 2 个集合列表中创建一个 setSubtraction,它返回出现在 xs 但不在 ys 中的所有元素的集合。例如 xs = [1,2,3] 和 ys = [3,4,5],那么 setSubtraction xs ys = [1,2]

这就是我目前所拥有的

setSubtract xs ys = [x | x <- xs, y <- ys, filter (==y) xs]

但是过滤功能似乎出错了

【问题讨论】:

  • 没关系,我能弄明白

标签: haskell filter list-comprehension


【解决方案1】:

我稍微更改了您的代码,并过滤 (== x) ys == [] 检查 x 没有出现在 ys 中。

这是定义:

setSubtract xs ys = [x | x <- xs, filter ( == x) ys == []]

它在行动:

λ>  setSubtract [1,2,3] [3,4,5]
[1,2]
λ> setSubtract [1,2,3,4,5,6,7] [3,4,5]
[1,2,6,7]
λ> 

另一种定义

setSubtract xs ys = [x | x <- xs, not . any ( == x) $ ys]

【讨论】:

    【解决方案2】:
     setSubtract cmp xs ys = [x | x <- xs, member cmp x ys == False]
    

    【讨论】:

      猜你喜欢
      • 2011-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-29
      相关资源
      最近更新 更多