#さっきはじめて気がついたんですが、トップレベルで
#(f)
#(g)
#としたばあい、(g) は f の継続には含まれないんですね。
#トップレベルのそれは解釈次第なんですが、GaucheのようにREPLと同じセマンティクス (ひとつのトップレベル式ごとに世界が更新される) の場合、
#fの継続が作られた時点でその次に(g)が来るかどうかってのはわからないので、含めようがないというか、
#REPLのように制御の流れの中で外部とのやりとりが発生する場合は、部分継続を使ってモデル化できるはずで、「fの継続」と言っているものも暗黙のうちに部分継続になっちゃってる、と解釈することもできます。
#こう考えたらいいかな。REPLセマンティクスの場合、fの継続というのは、「fの結果をprintして、プロンプトを出して次の式を受け取って評価して…を繰り返す」というものだけれど、その「次の式」は外から供給されるものなのでfの継続そのものには含まれない。
#で、プログラムのトップレベル式は字面では次に(g)が来ることは決定してるんだけど、Gaucheのセマンティクスでは単にREPLがトップレベル式を次々に読んで(結果とプロンプトは表示せずに)実行してるってだけなので、「Gaucheにとっては」やっぱりfの継続にその後の式は含まれない。
#R6RSのようにトップレベル全体がletrec*で囲まれているという解釈をするなら、fの継続に(g)を含めることはできる。この解釈はREPLとは相容れない。
#あーたしかに、REPL がいることを前提に考えると納得できます。
#全体を (begin ...) で囲むと (g) が f の継続に含まれるのも、納得です。
#そんなことないんじゃないかな。全部が決まってないというだけで RT: @zick_minoh: Schemeの意味論って厳密に決めれば決めるほど訳が分からないことになってる気がする。
#決まっているところはちゃんとわかる。で、決まってないところは厳密には「わからない」んだけど、決まっているところからの類推で解釈できる。ただ、類推の方法にはいくつもあって解釈が分かれる。
#意味論の話なら決まってないところは「わからない」でFA。ただ、実用プログラムでは意味が決まっていないところでも何らかの形で動いた方が便利なことがあって、それをどう決めると自然かっていう話は、意味論からは離れたところだよね。
#決まってるところの話をしているのか、決まってないところの話をしているのかを意識すれば、わけわからなくはないんじゃないかな。