1

我在 haskell 中编写了一个简短的程序来查找 1 到 2000 之间不能被 3 或 5 整除的奇数列表的平均值。我无法编译它并不断收到各种错误。我做了一些更改,现在代码在第 5 列第 9 行给了我一个“输入'sum'的解析错误”。有人可以告诉我我做错了什么吗?

--Write a Haskell function that calculates the mean of a list of odd numbers that
--are not divisible by 3 or 5 and whose sum is less than 2000.
mean :: Int
mean = let nums = [x|x <- [1,3..1999], x 'mod' 3 != 0, x 'mod' 5 != 0]
    sum nums/length nums

我正在使用 GHCI 进行编译。谢谢

4

2 回答 2

4

除了inDiegoNolan 提到的缺失之外,您的定义还有其他一些小问题。首先,要使用二元函数中缀,您必须将其括在反引号中 ` 而您使用记号 '。此外,Haskell/=用于不等式而不是!=。最后,您不能使用/整数除法,而是使用函数div

mean = let nums = [x|x <- [1,3..1999], x `mod` 3 /= 0, x `mod` 5 /= 0]
       in
       sum nums `div` length nums
于 2013-08-07T19:39:08.383 回答
2

你需要in

mean :: Int
mean = let nums = [x|x <- [1,3..1999], x 'mod' 3 != 0, x 'mod' 5 != 0]
       in sum nums/length nums
于 2013-08-07T19:30:51.827 回答