您好我是Haskell的新手,并创建此代码以附加两个列表.但我会得到一个解析错误.我究竟做错了什么?
import Data.List
-- list a + list b = list c
joinList :: [a] -> [a] -> [a]
joinList a + b = c
where
a = ["example1","example2","example3"]
b = ["example4","example4","example5"]
c = a ++ b
Run Code Online (Sandbox Code Playgroud)
错误:
test2.hs:5:1: `Parse error in pattern: joinList`
Run Code Online (Sandbox Code Playgroud)
如果你使它成为一个"常量"函数,一个不带任何参数的函数,那么调用它(如函数"main")将执行你似乎想到的计算.
joinList :: [a]
joinList = c
where
a = ["example1","example2","example3"]
b = ["example4","example4","example5"]
c = a ++ b
main = print joinList
Run Code Online (Sandbox Code Playgroud)
另一方面,常数函数并不常见.也许你想到的是两个调用append(++)的参数的函数.
joinList :: [a] -> [a] -> [a]
joinList a b = c
where
c = a ++ b
main = print $ joinList a b
where
a = ["example1","example2","example3"]
b = ["example4","example4","example5"]
Run Code Online (Sandbox Code Playgroud)
当然还有很多其他的可能性.我希望这两个给你一般的想法,以便你可以到达你想去的地方.
这里的问题非常简单.在Haskell中,函数声明如下所示:
<function-name> <function-arg-name>* = <body>
Run Code Online (Sandbox Code Playgroud)
在你的情况下,你有
<function-name> === joinList
<function-arg-name1> === a
Run Code Online (Sandbox Code Playgroud)
到目前为止一切都那么好,但是你有+,Haskell不会将其解析为名称,因此它会向您显示解析错误.要修复它很简单:删除它+,你会没事的.
更大的问题是你有一个where重新定义所有函数参数名称的子句.如果您希望您的功能正常工作:您还必须删除该where子句.最终的结果是
joinList a b = a ++ b
Run Code Online (Sandbox Code Playgroud)
如果你真的想成为哈斯克尔,你可以写
joinList = (++)
Run Code Online (Sandbox Code Playgroud)