Решение упражнения 2.39 из SICP
Определить reverse через свертки можно таким образом:
(define (reverse sequence) (fold-right (lambda (x y) (append y (list x))) nil sequence))
(define (reverse sequence) (fold-left (lambda (x y) (cons y x)) nil sequence))
Определения получаются путем анализа процесса вычислений сверток.
Хочу отметить, что использование для реверсирования последовательности левой свертки более видится более эффективным, поскольку задействованные операции более простые, а процесс итеративен.
Comments
Comment from магомед
Date: February 15, 2010, 5:08 pm
вот втором случае можно также сделать
(define (my-left-reverse sequence)
(fold-left (lambda (x y) (append (list y ) x)) nil sequence))
Write a comment