Lisp Scheme Part22at TECH
Lisp Scheme Part22 - 暇つぶし2ch209:183
08/05/30 10:41:05
昨日から考えていますが,まだ理解が不充分です.お教えください.
語弊があるかもしれませんが,変数の束縛関係が登録されている場所のことを「symbol-table」ということにします.
symbol-table が何枚も重なって,scope 全体の階層構造を表現しているとします.
昨日お教えいただいた「continuation は,自分が生成されたときの symbol-table への『参照』を持っている」という理解だと,
今度は >>196 の挙動が理解できません.
(>>183 の「symbol-tableの『deep-copy』を持っている」という私の最初の理解だと,>>197 の挙動が理解できませんでした.)
ここで生成される continuation が参照しているのは,let がつくる「top-level よりも 1 レベル深い symbol-table」だと思います.
>>196 の場合,末尾再帰の際に (+ counter 1) が評価されて,その結果の 2 が新たな counter の束縛値としてこの symbol-table
に書き込まれ,その後に let の本体が評価されますよね?
そうすると,loop の引数として (+ counter 1) を渡す >>196 も,set! で直接 symbol-table に束縛関係を書き込む >>197 も,
どちらも同じ >>197 のような結果を示すはずだと思うのです.なぜ >>196 が counter の最初の束縛値 1 を覚えているのでしょうか.
>>196>>197 の違いはどこにあるのでしょう?まさにそれがこの 2 つのコードを書いてみた動機だったのですが…
(多分 >>196 の評価過程をどこか間違えて理解しているのだと思います)


次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch