[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 01/29 10:31 / Filesize : 247 KB / Number-of Response : 980
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Lisp Scheme Part22



221 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 00:11:22 ]
λ式中の束縛識別子はそのλ式がapplyされた時に動的に生成されるCで言えばauto変数。
だから再帰などで同じ手続きが呼ばれてもそれぞれの変数の束縛(アドレス)はユニーク。
λ式中の自由識別子はそのλ式がevalされ(て手続きが生成され)た時に可視な束縛(ポインタ)が参照される。
だから再帰などで同じ手続きがよばれても同一の場所(アドレス)を参照する。

call/ccが引数の手続きに渡す継続は
case-Aの場合は(lambda (x) (write counter) (newline) (loop (+ counter 1)))
case-Bの場合は(lambda (x) (write counter) (newline) (set! counter (+ counter 1)) (loop counter))
この中に現れている自由識別子(というか束縛識別子は参照されてないけど)は何度呼ばれても同一の場所を参照する。
case-Bの場合はset!でcounterが束縛されているメモリの値を書き換えてるから
書き換えられた値を参照している。
ここで(loop (+ counter 1))は手続き呼び出しだから(loop 3)等の値に評価されてから手続きに渡されている事に留意。
そして1回目のloopのcounterと2回目のloopのcounterは同一でない場所を参照してる。(スタックフレームの再利用などの最適化されていなければ)






[ 続きを読む ] / [ 携帯版 ]

全部読む 前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<247KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef