« 残念な人の思考法 | Main | Lexical bindingとclosureがわからない »

2010.06.02

Lisp in Small Peices読んでる

まだ第一章の途中。第一章はThe basics of interpretationと言うことで、SICPの4章と同じくscheme上で動く俺schemeを作ってます。

SICPとの違いは、define-syntax等が説明もなく使われschemeの機能は分かっている前提で書かれています。また、SICPでは、
(define (first-exp seq) (car seq))
(define (rest-exps seq) (cdr seq))
のようにcar,cdrは、必ず意味づけを明確にしていますが、この本はcadr等が普通に使われています。SICPの方が教育的ですね。

closureに関してもSICPより少し突っ込んでいて、関数定義時の環境を使う理由について例を挙げて書いてあります。関数適用時に、実行時の環境を使う場合と、関数定義時の環境を使う場合の2つのコードを用意して、違いが説明してあります。一つの関数に、一つの環境を対応付けようとすると、定義時の環境しかありえないという説明があります。なるほど。

SICPではclosureの実装にはlist関数を使い、関数のbodyと関数生成時の環境をセットにして管理しています。SICPで使っているソースはこれ。
(define (make-procedure parameters body env)
  (list 'procedure parameters body env))
Lisp in Small Peicesの方は、素のschemeのclosureを使う事で、俺処理系のclosureを実装しています。schemeの機能はSICPより突っ込んで使っているので、違いを比べてみると面白いです。

|

« 残念な人の思考法 | Main | Lexical bindingとclosureがわからない »

Comments

Post a comment



(Not displayed with comment.)




TrackBack


Listed below are links to weblogs that reference Lisp in Small Peices読んでる:

« 残念な人の思考法 | Main | Lexical bindingとclosureがわからない »