Scheme作り始めましたええ、そうです。Schemeの処理系を書き始めました。これでLisp(系)処理系を書くのが何度目か数えるのも面倒になってきました。現在、こんなコードをコンパイルして動かすことができます。3)(newline)まだシンボルも作っていませんが、既にcall/ccが動作します。Scheme』という名前は決めました。—さてさて、時を遡ること、約半年。SchemeのWikipediaの記事を読んで衝撃を受けました。complete.Schemeの手続きをCの関数にコンパイルするにもかかわらず、そのCの関数は一切returnしないというのです。説明を書くと長くなりそうなので、詳しくはこの論文を読んでください。Schemeを書き始めました。今のところ、Cのreturnを一切使わないという目標は達成できているんですが、この実装方法のもう一つの肝である『スタックを対象としたごみ集め』に関しては、まだ一切コードを書いていません。先にシンボルを作ったり煩雑なところを少し進めることになりそうです。継続について気になったことがあったので少しメモ。呼び出すような作りにしていました。5))多くの場合はこれで問題なく動いたんですが、call/ccが出てくると問題が発生しました。手続きfの途中から処理が再開してしまうため、再び手続きgが呼ばれ、プログラムが無限ループに陥ってしまいます。Schemeのレベルでこの問題を解決する方法が思いつかなかったため、C言語のレベルで汚らしい方法で解決してしまったんですが、なんとかならないものなんでしょうかね。CPS変換についてもう少し詳しく調べたら定番の方法でも見つかるのかな。AMトップレベル式の継続の解釈はSchemeのダークコーナーなんですが、無限ループになるという実装も許されると思います。semanticsには単一式内での継続の動作しか定義されていない)。トップレベル全体が大きなletrecで被われてる、と考えれば、上の方の式に戻るという動作になります。(含むGauche)では、トップレベル式ごとに空の継続を作って呼び出します。後続の式(g)から前の式(f)内で作った継続を呼ぶと、それはそこからトップレベルに戻るまでの計算を行いますが、トップレベルに戻ってきた時点で計算を終了します。んですが、libraryフォームに書かれたexpressionはletrec*のボディのように実行されるので、素直に取るなら無限ループすることになるようにも思います。AMR5RSはトップレベルの式の扱いが詳細に定まっていないため、どのように実装しても問題ないということでしょうか。いえ、無限ループになると不便なので、トップレベルに戻った時点で計算を終了する仕様にします。単一式内での扱いしか定まっていなかったと思います。expressions.」(7.1)をどこまで厳密に取るかですね。動作はきちんと定まっているので。PMあら、不等号で囲んだワードがタグと解釈されて削除されちゃいました。expressions.」です。PMR6RSにはそんな記述があったんですね。厳密に受け取ったら、無限ループになりそうな気がします。Reply返信をキャンセルする。