Решение упражнения 2.31 из SICP

29 January, 2008 (22:58) | Решения упражнений

Обобщение совершенно естественно получается из любого варианта описания процедуры 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