2005-01-01から1ヶ月間の記事一覧

やっとスッキリ

効率悪いもの、まあまあスッキリした評価器ができた。やっと他の構文に取り掛かれる。とりあえずdefine,if,=を作った。これが無いとあんまりプログラムって感じがしない。トップレベルじゃないdefineの挙動はかなり怪しい。set!の代用になることをちょっぴり…

SchemeでScheme

ふと、Schemeで書かれたSchemeの処理系ってどんなのだろうと探してた。探しただけで見てないけどSICPにも載ってるらしい。そのうち読まなくては。

怪しい継続

悩みつつ怪しい作りの継続ができたように見える。評価中の関数を複数まとめて脱出したりできた。でも、全くスッキリしない作りだ。もう少し悩もう。評価の細かい手順が悪いせいで全体が崩れてるように見える。もう少し評価中の状態を細かく分けて考えるべき…

多値

無くても良さそうな気がしてたけど、せっかくだから作ろうとする。いい作り方が浮かばないけど。

ゆっくり再開

とりあえず末尾再帰は出来るようになった・・・と思う。 関数呼び出しをした所に目印を入れて関数を呼び出すたびに末尾かどうかチェック。効率悪そう。関数を作った時にどこが末尾式か調べるようにした方がいいのかな?その辺はマクロなんかを作れるようにな…

家庭の事情って面倒だ。

評価したりしなかったり

Schemeの式って同じような位置にあるのに同じタイミングで評価したりしなかったりする。 たとえば(if test then else)って感じに全部同じようにならんでるけどtestを評価した後thenかelseを評価しないといけない。他にも(define v e)なんかもeは評価するけど…

末尾再帰

今のところインタプリタだから一応作れそうなんだけど効率悪そう。もっとお手軽に末尾式であることを判定できないのかねぇ。今の予定ではとりあえず関数を呼び出すたびに関数の末尾だったかどうかを判定することになってる… 形 今、式の評価をスタック使った…

もう少し分かりやすく作れないだろうか

再帰に頼っていたところを再帰無しにするのって難しい。さて、lambdaも書き換えないといけない。そして、適当に完了。 継続をオブジェクトにするところまではできたと思う。ただ、call/ccをどう作ろうか悩んでる。call/ccが関数なら関数は好きなタイミングで…

お正月だね。