Haskell列表的产品

时间:2014-04-29 13:17:48

标签: list parsing haskell product

所以我需要编写一个返回整数列表产品的程序。这就是我试图制作的。但每次我得到"解析错误"在第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

但它仍然在=符号

上给出了解析错误

2 个答案:

答案 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]

顺便说一下,productPrelude提供的标准函数,具有类似(更好)的类型和相同的函数。

答案 1 :(得分:-2)

您的解析错误可能是由于缩进不一致造成的。一个好的建议是只使用空格来缩进。虽然可以使用制表符,但很容易使用一个编辑器来绊倒,该编辑器不会像Haskell那样精确地处理制表符。

在这里,所有函数声明都需要垂直对齐,就像do块中的所有语句一样。