« 今日の日記 | Main | SICP ambとロジックプログラミング »

2007.08.28

SICP 4章 関数の呼び出し

俺様処理系で、carとcdrは動くようになった。中身はgoshに、carしてね、cdrしてねって言っているだけ。
Lispの上で動くLisp処理系って、このレベルだとUNIXのシェルみたい。下の処理系に命令を渡して、その結果をあたかも自分が実行したかのように表示する。
ちょっとだけ自分で処理してみたり、パラメータを展開してみたり。最初はこんなものかも。

次は、(lambda (x) x)のように引数をそのまま返す関数を作ってみる。
make-procedureが、こんな感じ

(define (make-procedure parameters body env)
  (list 'procedure paramters body env))

手続きを定義したら、'procedureのtagをつけた後、定義した時のenvironmentをその手続きにくっつけている!実行時じゃなくて手続き生成時というのが驚き。Lispってこんな動きするのか。extend_environmentで、実引数を仮引数に束縛。こうすることで、手続き内部に仮引数と同じシンボルがあれば実引数に変換され、無ければ関数の外に値を探しにいくのか。むう。

次は、(define (echo x) (x)) のrambda シンタックスシュガーに挑戦。

(define (make-lambda parameters body)
(cons 'lambda (cons parameters body)))

いったんevalして、echo xを(lambda (x) x)にそのまま置き換えている。戻ってきたもの?を、再びeval。局所的に2パスなのね。しかし、僕は今何をしているんだろう。もっというと、make-lambdaって何を返しているんだ。文字列じゃないし、特別な型を返しているわけでもないし、Listとしか言えない物を返している気がする。正直、気持ち悪い。触手がうねうねするような、本能的な気持ち悪さ。Lispって泥んことかそんな無邪気な物じゃなくて、タコみたいに全体的にぐねぐねしていて、触手は触手で独自にうねうねしているような感じ。ふと下をみると、タコの下にはもっと巨大なタコが、そのしたにはもっともっと・・・・。ルルイエ!今、軽くSANチェック入った。

|

« 今日の日記 | Main | SICP ambとロジックプログラミング »

Comments

Post a comment



(Not displayed with comment.)




TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/18154/16267931

Listed below are links to weblogs that reference SICP 4章 関数の呼び出し:

« 今日の日記 | Main | SICP ambとロジックプログラミング »