【发布时间】:2011-11-14 03:41:14
【问题描述】:
我需要对下面代码的意外结果进行一些解释,似乎是由于一些错误。
reverse' :: [b] -> [b]
reverse' [] = []
reverse' [x] = [x]
reverse'(x:xs) = last (x:xs) : reverse' xs
*Main> reverse' [0,8,2,5,6,1,20,99,91,1]
[1,1,1,1,1,1,1,1,1,1]
这是因为一些错误吗?
【问题讨论】:
-
问题是您总是选择相同的最后一个元素作为列表的头部。快速修复是
reverse' xs = last xs : reverse' (init xs)。然而这个算法太可怕了:) -
感谢 is7s。我得更仔细地阅读我的代码