問題解答
問2.20
(define (same-party x . y) (define (iter f l) (cond ((null? l) ()) ((= (mod (car l) 2) f) (cons (car l) (iter f (cdr l)))) (else (iter f (cdr l))))) (iter (mod x 2) y)) (same-party 1 2 3 4 5 6 7) (same-party 2 2 3 4 5 6 7)
終了条件をどうすればいいのかわからなくて、ちょっと考えてしまいました。
これくらいのプログラムを書くにも未だに慣れないです。
本文
リストの写像
map を使用して、より抽象化することができる
(define (map proc items) (if (null? items) () (cons (proc (car items)) (map proc (cdr items))))) (map (lambda(x) (* x x)) (list 1 2 3 4))
問題解答
問2.21
(define (square-list items) (if (null? items) () (cons (* (car items) (car items)) (square-list (cdr items))))) (define (square-list items) (map (lambda(x) (* x x)) items)) (square-list (list 1 2 3 4))
問2.22
最初のコードは頭から値を取り出して、リストの頭に値を挿入しているので逆になってしまう。
変更したコードは、answer が対なので、対と値の対を作ってしまう。そのため、((() 1) 4 9) のような結果になってしまう。
問2.23
(define (for-each f items) (if (null? items) true (f (car items)) (for-each f (cdr items)))) (for-each (lambda (x) (newline) (display x)) (list 57 321 88))
これはこれで正解ですが、解答例を見ると begin というものがあるのですね。
本日はここまで。