本文使用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))))))