《计算机程序的构造和解析》 第2章习题选

本文使用DrRacket 编译,请在程序最前面添加 #lang racket

2.17

(define (last-pair items)
  (if (null? (cdr items))
      (car items)
      (last-pair (cdr items))))

2.18

(define (revert items)
  (define (revert-iter src_items dst_items)
    (if (null? src_items)
        dst_items
        (revert-iter
         (cdr src_items)
         (cons (car src_items) dst_items))))
  (revert-iter items '()))

2.20

(define (same-parity x . y)
  (define (even-equal? a b)
    (even? (- a b)))
  (define (parity-iter src_items dst_items)
    (if (null? src_items)
        dst_items
        (if (even-equal? (car dst_items) (car src_items))
            (parity-iter 
             (cdr src_items)
             (append dst_items (list (car src_items))))
            (parity-iter (cdr src_items) dst_items))))
  (parity-iter y (list x)))

2.21

(define (square-list items)
  (if (null? items)
      '()
      (cons (* (car items) (car items))
            (square-list (cdr items)))))

(define (square-list-with-map items)
  (map (lambda (x) (* x x)) items))

2.23

(define (for_each proc items)
  (if (null? items)
      #t
      ((lambda ()
        (proc (car items))
        (for_each proc (cdr items))))))




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值