实现反转列表中元素顺序的功能

问题描述 投票:0回答:1

我正在尝试在 Haskell 中实现我自己的反向函数版本。以下代码使用 : 运算符。

reverse' :: [a] -> [a]
reverse' [] = []
reverse' (x:xs) = reverse' xs : [x]

这会导致编译错误。但是,如果我改为使用 ++ 运算符,则代码可以毫无问题地编译。这在这里展示:

reverse' :: [a] -> [a]
reverse' [] = []
reverse' (x:xs) = reverse' xs ++ [x] 

为什么 : 运算符不在这里工作?

haskell functional-programming reverse
1个回答
1
投票

:
用于将元素添加到列表中,因此第一个(左)操作数应该是一个元素(
a
)但是你有
[a]
因此类型不匹配。
++
加入列表(
reverse' xs
的结果是
[a]
[x]
的类型是
[a]
)。

摘自“学 Haskell 学个好东西!” 列表介绍段落:

一个常见的任务是将两个列表放在一起。这是通过使用

++
运算符完成的。

使用

:
运算符(也称为 cons 运算符)将某些内容放在列表的开头

注意

:
如何接受一个数字和一个数字列表或一个字符和一个字符列表,而
++
接受两个列表。即使您使用
++
将一个元素添加到列表的末尾,您也必须用方括号将其括起来,这样它才能成为一个列表。

© www.soinside.com 2019 - 2024. All rights reserved.