列表理解和过滤元素

时间:2019-01-10 13:05:07

标签: haskell functional-programming

我一直在尝试为技术上简单的列表创建一个理解,但是我不确定Haskell是否可以实现我想要的结果。

如果我想列出从1到20的数字,过滤掉不能同时被3和5整除的数字,这将很简单

[x | x <- [1..20], not $ x `mod` 3 == 0 && x `mod` 5 == 0]

这将导致列表中的每个数字从1到20,而没有15。

但是,如果我想要而不是排除数字15,该列表的位置将被填充为0,该怎么办?如果范围更大并且我希望我的过滤器为假的每种情况都是相同的,而不是不采用数字,而是将其归因于xa预定值(在我的示例中为0),这可以通过列表理解来实现还是应该使用其他解决方案?

1 个答案:

答案 0 :(得分:4)

  

但是,如果我希望而不是排除数字15,该列表的位置将被填充0怎么办?

在这种情况下,这不是过滤,而是在映射中添加条件的映射应该映射为3和5分开的元素(在这种情况下,我们只能说15分)。到0:

[ if mod x 3 == 0 && mod x 5 == 0 then 0 else x | x <- [1..20]]

或更紧凑:

[ if mod x 15 == 0 then 0 else x | x <- [1..20]]