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というタグが付いているため)