SICP問題4.14

4.11 でやった各束縛が名前-値の対であるような束縛のリストで表現したフレームの定義のままだと、うまく評価器が動かなかったので、色々書き直しているうちに時間かかった。

Eva Lu Ator の方法で実行した場合

(define (map f lst)
  (if (null? lst)
      '()
      (cons (f (car lst)) (map f (cdr lst)))))
(map (lambda (x) x) '(1 2 3 4 5))

; (1 2 3 4 5)

Louis Reasoner の方法で実行した場合

;; (primitive-proceduresにmap手続きを追加しておく)
(map (lambda (x) x) '(1 2 3 4 5))

; *** ERROR: invalid application: ((procedure (x) (x) (((false true car cdr cons null? map) #f #t (primitive #<subr car>) (primitive #<subr cdr>) (primitive #<subr cons>) (primitive #<subr null?>) (primitive #<subr map>)))) 1)
; Stack Trace:
; _______________________________________
;   0  (eval input the-global-environment)
;         At line 491 of "C:/home/tmurata/scheme/4.Z.scm"

となる。
基盤Lispのmapからは第一引数が手続きでなく通常のリストに見えているため、うまくいっていない。(手続きの先頭に'procedureというタグが付いているため)