Solution:
(define (make-point x y) (cons x y)) (define (x-point p) (car p)) (define (y-point p) (cdr p)) (define (make-segment p1 p2) (cons p1 p2)) (define (start-segment s) (car s)) (define (end-segment s) (cdr s)) (define (midpoint-segment ls) (make-point (avg (x-point (start-segment ls)) (x-point (end-segment ls))) (avg (y-point (start-segment ls)) (y-point (end-segment ls))) )) (define (avg x y) (/ (+ x y) 2)) ;Test Data (define p1 (make-point 4 6)) (define p2 (make-point 8 18)) (define ls (make-segment p1 p2)) (midpoint-segment ls) ;6 12Exercise 2.27. Modify your reverse procedure of exercise 2.18 to produce a deep-reverse procedure that takes a list as argument and returns as its value the list with its elements reversed and with all sublists deep-reversed as well. For example,
(define x (list (list 1 2) (list 3 4))) x ((1 2) (3 4)) (reverse x) ((3 4) (1 2)) (deep-reverse x) ((4 3) (2 1))Solution:
(define (rev items) (define (helper items rl) (if (null? items) rl (helper (cdr items) (cons (car items) rl)))) (helper items null)) (define (deep-rev items) (define (helper ritems) (if (null? ritems) null (cons (if (not (pair? (car ritems))) (car ritems)(rev(car ritems))) (helper (cdr ritems))))) (helper (rev items)))Exercise 2.28. Write a procedure fringe that takes as argument a tree (represented as a list) and returns a list whose elements are all the leaves of the tree arranged in left-to-right order. For example,
(define x (list (list 1 2) (list 3 4))) (fringe x) (1 2 3 4) (fringe (list x x)) (1 2 3 4 1 2 3 4)Solution:
(define (fringe items) (cond ((null? items) null) (else (append (if (not (pair? (car items))) (list (car items)) (car items)) (fringe (cdr items)))))) (define (deep-fringe items) (if (not (exists-pair? items)) items (deep-fringe (fringe items)))) (define (exists-pair? items) (cond ((null? items) #f) ((pair? (car items)) #t) (else (exists-pair? (cdr items)))))Exercise 2.29. A binary mobile consists of two branches, a left branch and a right branch. Each branch is a rod of a certain length, from which hangs either a weight or another binary mobile. We can represent a binary mobile using compound data by constructing it from two branches (for example, using list):
(define (make-mobile left right) (list left right))A branch is constructed from a length (which must be a number) together with a structure, which may be either a number (representing a simple weight) or another mobile:
(define (make-branch length structure) (list length structure))a. Write the corresponding selectors left-branch and right-branch, which return the branches of a mobile, and branch-length and branch-structure, which return the components of a branch.
b. Using your selectors, define a procedure total-weight that returns the total weight of a mobile.
d. Suppose we change the representation of mobiles so that the constructors are
(define (make-mobile left right) (cons left right)) (define (make-branch length structure) (cons length structure))How much do you need to change your programs to convert to the new representation?
Solution:
a)
(define (make-branch len st) (list len st)) (define (make-mobile lb rb) (list lb rb)) (define (left-branch m) (car m)) (define (right-branch m) (car (cdr m))) (define (branch-length b) (car b)) (define (branch-structure b) (car (cdr b)))b)
(define (mobile? m) (pair? m)) (define (total-weight m) (cond ((null? m) 0) ((not (mobile? m)) m) (else (+ (total-weight (branch-structure (left-branch m))) (total-weight (branch-structure (right-branch m))))))) ;Test (define lb3 (make-branch 2 1)) (define rb3 (make-branch 1 2)) (define mb3 (make-mobile lb3 rb3)) (define lb2 (make-branch 3 mb3)) (define rb2 (make-branch 9 1)) (define mb2 (make-mobile lb2 rb2)) (define lb1 (make-branch 4 mb2)) (define rb1 (make-branch 8 2)) (define mb1 (make-mobile lb1 rb1)) (total-weight mb3) (total-weight mb2) (total-weight mb1)d)
(define (make-branch len st) (cons len st)) (define (make-mobile lb rb) (cons lb rb)) (define (left-branch m) (car m)) (define (right-branch m) (cdr m)) (define (branch-length b) (car b)) (define (branch-structure b) (cdr b))
No comments:
Post a Comment