这是使用foldr
我take
版本:实现需要用foldr
myTake n list = foldr step [] list
where step x y | (length y) < n = x : y
| otherwise = y
main = do print $ myTake 2 [1,2,3,4]
输出是不是我所期望:
[3,4]
我又试图通过插入y
长度为本身调试其结果是:
[3,2,1,0]
我不明白为什么长度按降序排列。也许我错过了一些明显的东西?
或在口头上,原因是'y'在'一步xy'被称为'foldr'代表** **不为*“列表的其余尚待已处理“*,**但**为*”处理列表的其余部分的结果“*。所以你的函数说:*“如果已处理的列表剩余长度已经是'n'或更多,请不要在其中加上任何内容,否则在当前元素前添加”*。 – 2013-06-22 20:05:23