Решение упражнения 2.31 из SICP
Обобщение совершенно естественно получается из любого варианта описания процедуры square-tree или scale-tree.
Вот вариант tree-map без использования map:
(define (tree-map proc tree) (cond ((null? tree) null) ((not (pair? tree)) (proc tree)) (else (cons (tree-map proc (car tree)) (tree-map proc (cdr tree))))))
А этот вариант реализации tree-map процедуру map использует:
(define (tree-map proc tree) (map (lambda (t) (if (pair? t) (tree-map proc t) (proc t))) tree))
С помощью tree-map можно записать кратко и scale-tree, и square-tree:
(define (scale-tree tree factor) (tree-map (lambda (x) (* x factor)) tree))
(define (square-tree tree) (tree-map square tree))
Красиво и удобно.
Comments
Comment from thror
Date: February 10, 2008, 5:24 pm
См. заметку к упражнению 2.25, более глубокомысленному, чем кажется на первый взгляд.
–thror
Comment from Sergey Khenkin
Date: February 10, 2008, 11:17 pm
Имеется в виду вот этот комментарий.
Write a comment