読者です 読者をやめる 読者になる 読者になる

Mae向きなブログ

Mae向きな日記のブログ版。ようやくこちらに移行してきました。

10章分の3章

Gauche

今日は、『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.

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