sicp 习题 2.17 ~ 2.20

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))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值