SICP 4.1.4 Ex. 4.14

  • 投稿日:
  • カテゴリ:

Ex. 4.14

car や cdr と同じように、基本手続きに map を追加する

(define primitive-procedures
  (list (list 'car car)
        (list 'cdr cdr)
        (list 'map map)
        ...

で、子Schemeで、map を使ってみる。

(map square '(2 3))

map は基本手続きなので、apply-primitive-procedure で処理されて、、、結局

(apply-in-underlying-scheme map '(square (2 3)))

という形で親Schemeに渡される。 map の2項以下が、square もろとも1つの引数扱いになっている。 もちろん親Schemeは、こんな map の構文は許していないのでエラーになる。

なお、親Schemeで許されている map の構文は

(apply-in-underlying-scheme map square '(2 3))

である。apply-primitive-procedure を改造して map のときだけうまく調整すれば、修正可能かもしれない。