Pau*_*rth 1 haskell functional-programming append
我正在尝试编写一个Haskell追加函数......这就是我所拥有的:
myappend :: [a] -> [a] -> [a]
myappend [] x = x
myappend [x:xs] y = x : myappend xs y
Run Code Online (Sandbox Code Playgroud)
但是它给了我一个错误:发生检查:无法构造无限类型:a = [a]当推广`myappend'的类型时
所以,显然它有问题但是我看不到它...我的追加功能有什么问题?
fis*_*ips 13
[a]类型的构造函数是:
[] The empty list
(:) Cons operator (just a regular infix constructor)
Run Code Online (Sandbox Code Playgroud)
所以,你必须使用:
myappend :: [a] -> [a] -> [a]
myappend [] x = x
myappend (x:xs) y = x : myappend xs y
Run Code Online (Sandbox Code Playgroud)
语法
[x:xs]
Run Code Online (Sandbox Code Playgroud)
几乎相当于
[(x:xs)]
Run Code Online (Sandbox Code Playgroud)
它将列表与一个元素,一个非空列表匹配,并具有类型
[(x:xs)] :: [[a]]
Run Code Online (Sandbox Code Playgroud)
如果您想了解构造函数和模式匹配概念,我建议您阅读此页面.