我编写了以下函数来查找输入数字的倍数。 当我尝试给出负数时,输出只是正数列表。如何修改我的代码以允许在输出中列出负数?
我的尝试:
multiples n = if n<0 then result1 else result2
where
result1 = [x | x <- [0..], x `mod` (-n) == 0]
result2 = [x | x <- [0..], x `mod` n == 0]
Input : take 5 $ multiples (-3)
Output: [0,3,6,9,12]
Expected Output: [0,-3,-6,-9,-12]
答案 0 :(得分:4)
如果您只是将参数乘以连续的自然数,则可以避免分支:
multiples n = map (* n) [0..]
这适用于所有n
,正面或负面。 (零,如果你不介意无限的0列表。)
答案 1 :(得分:2)
您需要在否定版本中否定x
:
result1 = [-x | x <- [0..], x `mod`(- n) == 0]
当然这只能解决你的直接问题@Chepner的回答更优雅