1
\$\begingroup\$

Define a procedure square-tree analogous to the square-list procedure of exercise 2.21. That is, square-list should behave as follows:

(square-tree (list 1
 (list 2 (list 3 4) 5)
 (list 6 7))) (1 (4 (9 16) 25) (36 49))

Define square-tree both directly (i.e., without using any higher-order procedures) and also by using map and recursion.

I wrote this solution. What do you think?

(define (square x) (* x x))
(define (square-tree tree)
 (cond ((null? tree) null)
 ((pair? tree)
 (cons (square-tree (car tree)) 
 (square-tree (cdr tree))))
 (else (square tree))))
(define (map-square-tree tree)
 (map (lambda (subtree)
 (if (pair? subtree)
 (cons (square-tree (car subtree))
 (square-tree (cdr subtree)))
 (square subtree)))
 tree))
(define a (list 1 1 (list (list 2 3) 1 2)))

EDIT: This is a much better solution for map-square-tree.

(define (square x) (* x x))
(define (square-tree tree)
 (cond ((null? tree) null)
 ((pair? tree)
 (cons (square-tree (car tree)) 
 (square-tree (cdr tree))))
 (else (square tree))))
(define (map-square-tree tree)
 (map (lambda (subtree)
 ((if (pair? subtree) map-square-tree square) subtree))
 tree))
(define a (list 1 1 (list (list 2 3) 1 2)))
Jamal
35.2k13 gold badges134 silver badges238 bronze badges
asked Apr 8, 2011 at 14:14
\$\endgroup\$

1 Answer 1

1
\$\begingroup\$

Your direct definition of square-tree is correct.

Your definition using map calls square-tree; to make it properly recursive, call map-square-tree instead. Further, you may recurse on the subtree itself. This will make your code succinct.

(define (map-square-tree tree)
 (map (lambda (subtree)
 ((if (pair? subtree) map-square-tree square) subtree))
 tree))
answered Apr 9, 2011 at 20:16
\$\endgroup\$

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.