使用Haskell的数字的倍数

时间:2016-11-04 14:25:40

标签: haskell functional-programming

我编写了以下函数来查找输入数字的倍数。 当我尝试给出负数时,输出只是正数列表。如何修改我的代码以允许在输出中列出负数?

我的尝试:

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]

2 个答案:

答案 0 :(得分:4)

如果您只是将参数乘以连续的自然数,则可以避免分支:

multiples n = map (* n) [0..]

这适用于所有n,正面或负面。 (零,如果你不介意无限的0列表。)

答案 1 :(得分:2)

您需要在否定版本中否定x

result1 = [-x | x <- [0..], x `mod`(- n) == 0]

当然这只能解决你的直接问题@Chepner的回答更优雅