【问题标题】:Haskell product of list列表的 Haskell 产品
【发布时间】:2014-04-29 13:17:48
【问题描述】:

所以我需要编写一个程序返回整数列表的乘积。这是我尝试做的。但是每次我在第 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

但它仍然给我在 = 符号上的解析错误

【问题讨论】:

  • 什么是“整数列表的乘积”?我想你的意思是,列表中整数的乘积。

标签: list parsing haskell product


【解决方案1】:

在下面的代码中

product :: [Integer] -> Integer
product []     = 1
product i f = foldl (*) 1 [i..f]

你声明product的类型是[Integer] -&gt; Integer,但是在第二个子句中,你给了它两个参数,这显然和它的类型不匹配。

你可以像这样简单地定义它

product xs = foldl (*) 1 xs

并像这样使用它

product [i..f]

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

【讨论】:

  • 使用更好的类型:product :: Num a =&gt; [a] -&gt; a.
【解决方案2】:

您的解析错误可能是由于缩进不一致。一个好的建议是仅使用空格进行缩进。虽然可以使用选项卡,但如果编辑器不能像 Haskell 那样精确地处理选项卡,则很容易出错。

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

【讨论】:

  • 有趣的是,作为唯一一个解释实际问题的原因 asked 的人如何让你被否决。 (是的,我知道另一个答案解释了一些稍后会出现的东西,但它没有解释他们的 解析 错误。)
猜你喜欢
  • 1970-01-01
  • 2016-10-13
  • 1970-01-01
  • 1970-01-01
  • 2017-02-04
  • 2014-08-14
  • 1970-01-01
相关资源
最近更新 更多