2.17
2.18
2.19
2.20
(define (my-last-pair l)
(if (null? (cdr l))
(car l)
(last-pair (cdr l))))
(my-last-pair (list 23 72 149 34))
2.18
(define (my-reverse l)
(if (or (null? l) (= (length l) 1))
l
(append (my-reverse (cdr l)) (list (car l)))))
(my-reverse (list 23 72))
(my-reverse (list 23 72 149 34))
2.19
(define (no-more? coin-values)
(or (< (length coin-values) 0) (= (length coin-values) 0)))
(define (except-first-denomination coin-values)
(cdr coin-values))
(define (first-denomination coin-values)
(car coin-values))
(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 us-coins (list 50 25 10 5 1))
(define uk-coins (list 100 50 20 10 5 2 1 0.5))
(cdr us-coins)
(car us-coins)
(cc 100 us-coins)
2.20
(define (odd-list l)
(cond ((or (null? l) (< (length l) 0) (= (length l) 0)) l)
((odd? (car l)) (append (list (car l)) (odd-list (cdr l))))
(else (odd-list (cdr l)))))
(define (even-list l)
(cond ((or (null? l) (< (length l) 0) (= (length l) 0)) l)
((even? (car l)) (append (list (car l)) (even-list (cdr l))))
(else (even-list (cdr l)))))
(odd-list (list 1 2 3 4 5 6 7))
(even-list (list 1 2 3 4 5 6 7))
(define same-parity (lambda (n . l)
(if (odd? n)
(append (list n) (odd-list l))
(append (list n) (even-list l)))))
(same-parity (list 1 2 3 4 5 6 7))