imho Дарио обманывал, используя реверс, поскольку упражнение было выражено в терминах сгиба, а не сгиба назад. Это, конечно, ужасный способ выразить сканирование, но это забавное упражнение - втиснуть квадратный колышек в круглое отверстие.
Вот оно в хаскеле, я не знаю, шепот
let scan f list = foldl (\ xs next -> xs++[f (last xs) next]) [0] list
scan (+) [1, 4, 8, 3, 7, 9]
[0,1,5,13,16,23,32]
Конечно, используя тот же трюк, что и Дарио, можно избавиться от этой ведущей 0:
let scan f list = foldl (\ xs next -> xs++[f (last xs) next]) [head list] (tail list)
scan (+) [1, 4, 8, 3, 7, 9]
[1,5,13,16,23,32]