Sunday, June 7, 2009

Ex-2.19

(define (cc amount coin-values)
(cond ((= amount 0) 1)
((or (< amount 0) (no-more? coin-values)) 0)
(else
(+ (cc amount
(except-first-denomination coin-values))
(cc (- amount
(first-denomination coin-values))
coin-values)))))
(define (first-denomination coins)
(car coins))
(define (no-more? coin-values)
(= (length coin-values) 0))
(define (except-first-denomination coin-values)
(cdr coin-values))

Order of coin-values doesn't affect the answer produced, because in the cc we're treating coin-values as just a set of values without any assumption of its order.

Ex-2.18

(define (reverse l)
(define (iter a r)
(if (null? a) r
(iter (cdr a) (cons (car a) r))))
(iter l '()))

Ex-2.17

(define (last-pair l)
(list (list-ref l (- (length l) 1))))

Ex-2.16

passed

Ex-2.15

Yes, She is right. And the reason is, more the uncertain number is repeated more uncertainity it brings to the system(overall calculation).

Ex-2.14

(define (par1 r1 r2)
(div-interval (mul-interval r1 r2)
(add-interval r1 r2)))
(define (par2 r1 r2)
(let ((one (make-interval 1 1)))
(div-interval one
(add-interval (div-interval one r1)
(div-interval one r2)))))


Indeed the results are different:
1 ]=> (par1 (make-interval 3 4) (make-interval 5 7))
;Value 1: (1.3636363636363638 . 3.5)
1 ]=> (par2 (make-interval 3 4) (make-interval 5 7))
;Value 2: (1.875 . 2.5454545454545454)

with center-percent form also the results are different
1 ]=> (par1 (make-center-percent 5 10) (make-center-percent 10 5))
;Value 4: (2.671875 . 4.125)
1 ]=> (par2 (make-center-percent 5 10) (make-center-percent 10 5))
;Value 5: (3.053571428571429 . 3.609375)

Ex-2.13-todo

-