; ex2.17
(define (last-pair l)
(if (null? (cdr l))
l
(last-pair (cdr l))))
; ex2.18
(define (my_reverse l)
(if (null? (cdr l))
l
(append (my_reverse (cdr l)) (list (car l)))))
; ex2.19
(define us-coins (list 50 25 10 5 1))
(define uk-coins (list 100 50 20 10 5 2 1 0.5))
(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 (no-more? coin-values)
(null? coin-values))
(define (except-first-denomination coin-values)
(cdr coin-values))
(define (first-denomination coin-values)
(car coin-values))
; ex2.20
(define (same-parity . l)
(define (same-parity-p parity l)
(if (null? l)
null
(if (= parity (remainder (car l) 2))
(cons (car l) (same-parity-p parity (cdr l)))
(same-parity-p parity (cdr l)))))
(same-parity-p (remainder (car l) 2) l))
;ex2.11
(define (square-list-r items)
(if (null? items)
null
(cons (square (car items))
(square-list-r (cdr items)))))
(define (square-list-map items)
(map (lambda (x) (* x x))
items))
;ex2.22
(define (square-list-i items)
(define (iter things answer)
(if (null? things)
answer
(iter (cdr things)
(append answer
(list (square (car things)))))))
(iter items null))
;ex2.23
(define (my-for-each f l)
(if (null? l)
(newline)
(begin (f (car l))
(my-for-each f (cdr l)))))
SICP学习笔记5 ex2.17 -- ex2.23
最新推荐文章于 2024-09-07 23:13:34 发布