SICP习题解答2.17-2.23
来源:互联网 发布:淘宝闲鱼钓鱼网站源码 编辑:程序博客网 时间:2024/05/18 02:16
#lang racket; exercise 2.17(define (last-pair l) (cond ((null? l) null) ((null? (cdr l)) l) (else (last-pair (cdr l)))))(last-pair (list 23 72 149 34))(last-pair '(1))(last-pair '()); exercise 2.18(define (reverse l) (define (first-n-1 l) (if (null? (cdr l)) null (cons (car l) (first-n-1 (cdr l))))) (if (null? l) null (cons (car (last-pair l)) (reverse (first-n-1 l)))))(reverse (list 1 4 9 16 25)) ;; '(25 16 9 4 1); exercise 2.19(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? l) (null? l))(define (except-first-denomination l) (cdr l))(define (first-denomination l) (car l))(define us-coins (list 50 25 10 5 1))(define uk-coins (list 100 50 20 10 5 2 1 0.5))(cc 100 us-coins) ;; 292;(cc 100 uk-coins) ;; 104561;; coins-value的排列不会影响cc的结果; exercise 2.20(define (same-parity x . y) (define (sp x y) (define (odd? n) (= (remainder n 2) 1)) (cond ((null? y) null) ((odd? (+ x (car y))) (sp x (cdr y))) (else (cons (car y) (sp x (cdr y)))))) (cons x (sp x y)))(same-parity 1 2 3 4 5 6 7)(same-parity 2 3 4 5 6 7); exercise 2.21(define (square-list items) (if (null? items) null (cons (square (car items)) (square-list (cdr items)))))(define (square-list2 items) (map square items))(define (square x) (* x x))(square-list (list 1 2 3 4))(square-list2 (list 1 2 3 4)); exercise 2.23(define (for-each proc l) (cond ((not (null? l)) (proc (car l)) (for-each proc (cdr l)))))(for-each (lambda (x) (newline) (display x)) (list 57 321 88))