我是哈斯凯尔的新手。 我写了一个简单的代码。 但它不起作用。 我得到这个'无法构造无限类型'的错误。 它是如何解决的。
reverse' list
| null list = []
| otherwise = (reverse' (tail list)) : (head list)
答案 0 :(得分:6)
问题源于您使用:
运算符,其类型为
(:) :: a -> [a] -> [a]
因此它需要一个元素和一个列表,并返回一个前面包含该元素的新列表。你在哪里
reverse' (tail list) : head list
-- parentheses removed since they're not needed
reverse' (tail list)
的类型为[a]
,head list
的类型为a
,因此编译器会尝试将其设为a ~ [a]
,显然无法工作。相反,您可以使用++
运算符并将head list
放入列表本身:
reverse' (tail list) ++ [head list]
但请记住,这不是一个非常有效的解决方案,因为它们是单链表,所以在Haskell列表末尾的连接很慢。