`
zhangle
  • 浏览: 25952 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

sicp 习题 2.17 ~ 2.20

    博客分类:
  • SICP
阅读更多
2.17
(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))
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics