我一直在尝试为技术上简单的列表创建一个理解,但是我不确定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),这可以通过列表理解来实现还是应该使用其他解决方案?
答案 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]]