Код Ревью

Сравни свои решения

    ;Реализация хвостовой рекурсией
(define (reversed list)
  (define (iter list-1 list-2)
    (if (null? list-1)
        list-2
        (iter (cdr list-1) (cons (car list-1) list-2))))
  (iter list '() ))

(define (fold-left f x0 list)
  (define (iter accum l)
    (if (null? l)
        accum
        (iter (f accum (car l)) (cdr l))))
  (iter x0 list))

(define (fold-right f x0 list)
  (define (iter accum l)
    (if (null? l)
        accum
        (iter (f (car l) accum) (cdr l))))
  (iter x0 (reversed list)))


;Реаллизация нехвостовой рекусрсией
(define (foldr-rec f x0 list)
  (if (null? list)
      x0
      (f (car list) (foldr-rec f x0 (cdr list)))))

;Лев и прав свертка равны, при условиях ассоциативности и коммутативности операции (на общем типе вспомогательного списка и начального значения)
;Пусть А - оперируемый общ. тип,  f - преобразование, е - нейтральный элемент
;Тогда, если (A, f, e) - моноид, то прав и лев свертка дёт одинаковый результат