- 此问题在此处已有答案**:
Haskell (:) and (++) differences(5个答案)
昨天关门了。
我尝试在Haskell中实现我自己版本的reverse函数。下面的代码利用了:接线员。
reverse' :: [a] -> [a]
reverse' [] = []
reverse' (x:xs) = reverse' xs : [x]
这会导致编译错误。但是,如果我使用++操作符,代码编译时不会出现问题。这在下面进行了演示:
reverse' :: [a] -> [a]
reverse' [] = []
reverse' (x:xs) = reverse' xs ++ [x]
为什么不:接线员在这里工作吗?
1条答案
按热度按时间wlzqhblo1#
:
用于向列表添加元素,因此第一个(左)操作数应该是元素(a
),但您有[a]
,因此类型不匹配。++
连接到列表(reverse' xs
的结果类型为[a]
,[x]
类型为[a]
)。从“学你一个伟大的好 haskell !”介绍列出段落:
一个常见的任务是将两个列表放在一起,这是通过使用
++
操作符来完成的。使用
:
操作符(也称为cons操作符)将某些内容放在列表的开头注意
:
是如何接受一个数字和一个数字列表,或者一个字符和一个字符列表的,而++
接受两个列表,即使你用++
在一个列表的末尾添加一个元素,你也必须用方括号把它括起来,这样它就变成了一个列表。