Это моя 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]
Я не понимаю, почему длины вставляются в порядке убывания. Может быть, я пропустил что-то очевидное?