我正在尝试在 Haskell 中实现我自己的反向函数版本。以下代码使用 : 运算符。
reverse' :: [a] -> [a]
reverse' [] = []
reverse' (x:xs) = reverse' xs : [x]
这会导致编译错误。但是,如果我改为使用 ++ 运算符,则代码可以毫无问题地编译。这在这里展示:
reverse' :: [a] -> [a]
reverse' [] = []
reverse' (x:xs) = reverse' xs ++ [x]
为什么 : 运算符不在这里工作?
:
用于将元素添加到列表中,因此第一个(左)操作数应该是一个元素(a
)但是你有 [a]
因此类型不匹配。 ++
加入列表(reverse' xs
的结果是 [a]
和 [x]
的类型是 [a]
)。
摘自“学 Haskell 学个好东西!” 列表介绍段落:
一个常见的任务是将两个列表放在一起。这是通过使用
运算符完成的。++
使用
运算符(也称为 cons 运算符)将某些内容放在列表的开头:
注意
如何接受一个数字和一个数字列表或一个字符和一个字符列表,而:
接受两个列表。即使您使用++
将一个元素添加到列表的末尾,您也必须用方括号将其括起来,这样它才能成为一个列表。++