Учитывая список чисел, скажем, (1 3 6 10 0), как вы вычисляете разности (xi - xi-1), при условии, что у вас есть x-1< /под> = 0?
(результат в этом примере должен быть (1 2 3 4 -10))
Я нашел это решение правильным:
(define (pairwise-2 f init l)
(first
(foldl
(λ (x acc-data)
(let ([result-list (first acc-data)]
[prev-x (second acc-data)])
(list
(append result-list (list(f x prev-x)))
x)))
(list empty 0)
l)))
(pairwise-2 - 0 '(1 3 6 10 0))
;; => (1 2 3 4 -10)
Однако я думаю, что должно быть более элегантное, но не менее гибкое решение. Это просто некрасиво.
Я новичок в функциональном программировании и хотел бы услышать любые предложения по коду.
Спасибо.