你好我是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
错误:
test2.hs:5:1: `Parse error in pattern: joinList`
答案 0 :(得分:6)
如果你使它成为一个“常量”函数,一个不带任何参数的函数,那么调用它(如函数“main”)将执行你似乎想到的计算。
joinList :: [a]
joinList = c
where
a = ["example1","example2","example3"]
b = ["example4","example4","example5"]
c = a ++ b
main = print joinList
另一方面,常数函数并不常见。也许你想到的是两个调用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"]
当然还有很多其他的可能性。我希望这两个给你一般的想法,以便你可以到达你想去的地方。
答案 1 :(得分:5)
这里的问题非常简单。在Haskell中,函数声明如下所示:
<function-name> <function-arg-name>* = <body>
在你的情况下,你有
<function-name> === joinList
<function-arg-name1> === a
到目前为止一直很好,但是你有+
,Haskell不会将其解析为名称,因此它会显示一个解析错误。要解决这个问题很简单:删除+
,你会没事的。
更大的问题是你有一个where
子句重新定义了所有的函数参数名。如果您希望您的函数正常工作:您还必须删除该where
子句。最终结果是
joinList a b = a ++ b
如果你真的想成为haskell-y,你可以写
joinList = (++)