使用 Haskell 的数字的倍数

1 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]
Run Code Online (Sandbox Code Playgroud)

che*_*ner 5

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

multiples n = map (* n) [0..]
Run Code Online (Sandbox Code Playgroud)

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