2013年9月15日日曜日

開発環境

計算機プログラムの構造と解釈(Gerald Jay Sussman(原著)、Julie Sussman(原著)、Harold Abelson(原著)、和田 英一(翻訳)、ピアソンエデュケーション、原書: Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science)(SICP))の4(超言語的抽象)、4.1(超循環評価器)、4.1.7(構文解析を実行から分離する)、問題 4.23を解いてみる。

その他参考書籍

問題 4.23

並びが一つの式しか持たない通常の場合。

(define exp '(begin 1))

(analyze-sequence (begin-actions '(begin 1)))

(analyze-sequence '(1))

;; letによりprocsに束縛される値を求める
(map analyze '(1))

'((analyze '1))

'((analyze-self-evaluating '1))

;; 次がprocsに束縛される値
'((lambda (env) 1))

;; ここから先が異なる

本文の版。

(loop '(lambda (env) 1) '())

'(lambda (env) 1)

Alyssaの版。

(lambda (env) (execute-sequence '((lambda (env) 1)) env))

二つの式を持つ並びについて。

(define exp '(begin 1 2))

(analyze-sequence (begin-actions '(begin 1 2)))

(analyze-sequence '(1 2))

;; letによりprocsに束縛される値を求める
(map analyze '(1 2))

'((analyze '1) (analyze '2))

'((analyze-self-evaluating '1) (analyze-self-evaluating '2))

;; 次がprocsに束縛される値
'((lambda (env) 1) (lambda (env) 2))

;; この先が二つの版で異なる。

本文の版。

(loop '(lambda (env) 1) '((lambda (env) 2)))

(loop (sequentially '(lambda (env) 1) '(lambda (env) 2))
      (cdr '((lambda (env) 2))))

(loop (lambda (env) ('(lambda (env) 1) env) ('(lambda (env) 2) env))
      '())

(lambda (env) ('(lambda (env) 1) env) ('(lambda (env) 2) env))

Alyssaの版。

(lambda (env) (execute-sequence '((lambda (env) 1) (lambda (env) 2)) env))

Alyssa版だと、並びの個々の式は解析されるが、並び自身は解析されない。(execute-sequenceが残ったまま)

0 コメント:

コメントを投稿