-1

我的代码:

addConcat :: [Int] -> [Int]
addConcat [x,y] = z:(z + y) where (z = x + y)

我正在实现的功能与上述功能不完全相同,但格式相同,我总是得到:

Syntax error in input (unexpected symbol "y")

那么我的 Haskell 代码有什么问题呢?我真的需要使用“where”子句,但我认为我做错了什么。

4

1 回答 1

3

我无法重现您声称得到的错误。如果您将该代码写入文件并使用ghc错误编译它是:

<filename>.hs:2:38: parse error on input ‘=’

问题是 for 的语法where是错误的。要么写:

an_expression where z = x+y

或者你必须使用花括号

an_expression where {z=x+y;}

您不能使用括号对作业进行分组。

请注意,在 ghci 中编写时,您必须将声明组合在一起并使用 alet来定义函数:

Prelude> let {addConcat :: [Int] -> [Int]; addConcat [x,y] = [z,z+y] where z=x+y;}
Prelude> addConcat [1,2]
[3,5]

另请注意,即使修复此问题,您的函数仍然存在类型错误,因为第二个参数:必须是列表,z+y而是数字。你想要z:[z+y]或更简单[z, z+y]

于 2016-04-24T08:37:44.163 回答