haskell 实现函数来反转列表中元素的顺序[duplicate]

zaqlnxep  于 2023-03-03  发布在  其他
关注(0)|答案(1)|浏览(169)
    • 此问题在此处已有答案**:

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]

为什么不:接线员在这里工作吗?

wlzqhblo

wlzqhblo1#

:用于向列表添加元素,因此第一个(左)操作数应该是元素(a),但您有[a],因此类型不匹配。++连接到列表(reverse' xs的结果类型为[a][x]类型为[a])。
从“学你一个伟大的好 haskell !”介绍列出段落:
一个常见的任务是将两个列表放在一起,这是通过使用++操作符来完成的。
使用:操作符(也称为cons操作符)将某些内容放在列表的开头
注意:是如何接受一个数字和一个数字列表,或者一个字符和一个字符列表的,而++接受两个列表,即使你用++在一个列表的末尾添加一个元素,你也必须用方括号把它括起来,这样它就变成了一个列表。

相关问题