所以我需要编写一个返回整数列表产品的程序。这就是我试图制作的。但每次我得到"解析错误"在第4行的=符号上。
--product.hs
product :: [Integer] -> Integer
product [] = 1
product i f = foldl (*) 1 [i..f]
main = do
print "Please enter first number"
i <- readLn
print "Please enter second number"
f <- readLn
print "The result is:"
print (product i f)
我也试过
product (x:xs) = x * product xs
但它仍然在=符号
上给出了解析错误答案 0 :(得分:4)
在以下代码中
product :: [Integer] -> Integer
product [] = 1
product i f = foldl (*) 1 [i..f]
你声明product
的类型是[Integer] -> Integer
,但是在第二个子句中,你给它两个参数,这显然与它的类型不匹配。
您可以像这样
定义它product xs = foldl (*) 1 xs
并像这样使用
product [i..f]
顺便说一下,product
是Prelude
提供的标准函数,具有类似(更好)的类型和相同的函数。
答案 1 :(得分:-2)
您的解析错误可能是由于缩进不一致造成的。一个好的建议是只使用空格来缩进。虽然可以使用制表符,但很容易使用一个编辑器来绊倒,该编辑器不会像Haskell那样精确地处理制表符。
在这里,所有函数声明都需要垂直对齐,就像do块中的所有语句一样。