Mae向きなブログ

Mae向きな情報発信を続けていきたいと思います。

10章分の3章

今日は、『The Little Schemer』の

  • Chapter 3 Cons the Magnificent

を読みました。

第3章は,consと再帰についての学習でした。特に,再帰については丁寧に1ステップずつ読み解いています。
疑問点というわけではないのですが,例えば,第3章の最後にmultisubst関数が出てきます。下記のように,リストの中のandをorに全て書き換えるものなのですが,

gosh> (define l '(chips and fish or fish and fried))
l
gosh> (multisubst 'or 'and l)
(chips or fish or fish or fried)

本では,

(define multisubst
  (lambda (new old lat)
    (cond
     ((null? lat) (quote ()))
     (else (cond
            ((eq? (car lat) old)
             (cons new
                   (multisubst new old
                               (cdr lat))))
            (else (cons (car lat)
                        (multisubst new old
                                    (cdr lat)))))))))

のように,condの入れ子で書いています。これは,以下のように書いた方がシンプルなような気がするのですが…。なぜ以下のように書かないんだろう?

(define multisubst
  (lambda (new old lat)
    (cond
     ((null? lat) (quote ()))
     ((eq? (car lat) old)
      (cons new
            (multisubst new old
                        (cdr lat))))
     (else (cons (car lat)
                 (multisubst new old
                             (cdr lat)))))))

追記

p23のThe First Commandmentに書いてありました…。ここにはpreliminaryとあるのですが,これは,「本の前付」という意味なんですね。見開きを見てみると,以下のような記述が…。

When recurring on a list of atoms, lat, ask two questions about it: (null? lat) and else.

上記の疑問は解決しました。