我的 Haskell 代码有什么问题?
What is wrong with my Haskell code?
我的代码:
addConcat :: [Int] -> [Int]
addConcat [x,y] = z:(z + y) where (z = x + y)
我实现的函数与上面的函数不完全相同,但格式相同,我总是得到:
Syntax error in input (unexpected symbol "y")
那么我的 Haskell 代码有什么问题?我确实需要使用 'where' 子句,但我认为我做错了什么。
我无法重现您声称遇到的错误。如果您将该代码写入文件并使用 ghc
进行编译,则错误为:
<filename>.hs:2:38: parse error on input ‘=’
问题是 where
的语法错误。要么写:
an_expression where z = x+y
或者你必须使用大括号:
an_expression where {z=x+y;}
您不能使用括号对作业进行分组。
请注意,在 ghci 中编写时,必须将声明组合在一起并使用 let
来定义函数:
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]
.
我的代码:
addConcat :: [Int] -> [Int]
addConcat [x,y] = z:(z + y) where (z = x + y)
我实现的函数与上面的函数不完全相同,但格式相同,我总是得到:
Syntax error in input (unexpected symbol "y")
那么我的 Haskell 代码有什么问题?我确实需要使用 'where' 子句,但我认为我做错了什么。
我无法重现您声称遇到的错误。如果您将该代码写入文件并使用 ghc
进行编译,则错误为:
<filename>.hs:2:38: parse error on input ‘=’
问题是 where
的语法错误。要么写:
an_expression where z = x+y
或者你必须使用大括号:
an_expression where {z=x+y;}
您不能使用括号对作业进行分组。
请注意,在 ghci 中编写时,必须将声明组合在一起并使用 let
来定义函数:
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]
.