這是使用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