Напишите процедуру, (fold-right-tree op id tree)
, которая собирает листья дерева, используя op, аналогично сгибанию вправо в списках. Поэтому, если дерево имеет значение
(((1 2)
3)
(4
(5 6))
7
(8 9 10))
, тогда
(fold-right-tree + 0 tree)
имеет значение 55.
- я хотел определить код, который суммирует все элементы в дереве
;;----------
(#%require racket)
(define nil empty)
(define (reduce op init lst)
(if (null? lst)
init
(op (car lst)
(reduce op init (cdr lst)))))
(define fold-right reduce)
(define (sum-list lst)
(if (null? lst) 0
(+ (car lst) (sum-list (cdr lst)))
))
(define (leaf? x)
(not (pair? x)))
(define (fold-right-tree op init tree)
(lambda (tree)
(if (null? tree)
0
(if (leaf? tree)
(sum-list (list tree))
(fold-right op init (map fold-right-tree op init tree))))))
(fold-right-tree (lambda (x,y) (+ x y)) 0 '((1) (2 3 4) (((5)))) )
Выходные данные должны возвращать сумму элементов дерева, но возвращает #<procedure>
в чем моя проблема?
Я также пробовал эту проблему, но на этот раз я получил сообщение об ошибке дляотображение
(define (fold-right-tree op init tree)
(if (null? tree)
0
(if (leaf? tree)
(fold-right op init (list tree))
(+ (fold-right-tree op init (map car tree)) (fold-right-tree op init (map cdr tree))))))
(fold-right-tree sum 0 '((1) (2 3 4) (((5)))) )