tag:blogger.com,1999:blog-9197115.post4501508103540825092..comments2023-12-04T01:08:41.914+09:00Comments on k16's note: k16http://www.blogger.com/profile/02349067627444091120noreply@blogger.comBlogger4125tag:blogger.com,1999:blog-9197115.post-83123225048304881682007-03-06T06:25:00.000+09:002007-03-06T06:25:00.000+09:00ありがとうございます。ようやく何を勘違いしていたのか見えてきました。> この時点での継続 k0 は,...ありがとうございます。ようやく何を勘違いしていたのか見えてきました。<BR/><BR/>> この時点での継続 k0 は,<BR/>> 「もう片方の (integ) も評価し, 両者の結果を要素とするリストを作る」.<BR/><BR/>「(list (integ) (integ))という文脈で最初の(integ)がとらえる継続」がまったく頭から落ちていました。<BR/>個々の(integ)は別々の環境で評価されて、listはその結果をそれぞれ使うとでも思い込んでいたようです。<BR/><BR/># にしても、納得してからこうやって文章にしてみると、あからさまに「んなわけないじゃん」という話ですね……k16https://www.blogger.com/profile/02349067627444091120noreply@blogger.comtag:blogger.com,1999:blog-9197115.post-89994896164106030802007-03-05T23:59:00.000+09:002007-03-05T23:59:00.000+09:00ふむ.gosh> (* (integ) 3)3gosh> (list (integ) (integ)...ふむ.<BR/>gosh> (* (integ) 3)<BR/>3<BR/>gosh> (list (integ) (integ))<BR/>6<BR/>gosh> (list (integ) (integ))<BR/>9<BR/><BR/>最初に (integ) が呼ばれたときに integ をすりかえる.<BR/>何にすりかえるかというと, 「継続 k に '() を渡す」という関数に.<BR/>上の例の場合, 継続 k とは「(R (+ n 1)) を求めてその結果を 3 倍する」.<BR/><BR/>(list (integ) (integ)) で起きているのは…<BR/>まず片方の (integ) を評価しようとする.<BR/>この時点での継続 k0 は,<BR/>「もう片方の (integ) も評価し, 両者の結果を要素とするリストを作る」.<BR/>でも (integ) は上に書いたとおりなので, k0 を放棄して k の方へ.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-9197115.post-54004236481832119152007-03-05T14:15:00.000+09:002007-03-05T14:15:00.000+09:00あ、確かに k を使ってさえいない!最初に「ところで」のほうをずっといじっていたせいで、自分が何をし...あ、確かに k を使ってさえいない!<BR/>最初に「ところで」のほうをずっといじっていたせいで、自分が何をしていたのか見失っていました。本文も訂正しておきます。<BR/><BR/>「ところで」のほうは、どうしてそういう動作になるのか、以前としてよく分かっていません。<BR/><BR/>> 定義後まず (integ) を一度やっておけば数字(リストではない!)を順次返しますね.<BR/><BR/>リストでないだけでなく、(integ)を1回しか実行しないのが謎です。<BR/><BR/>gosh> (integ)<BR/>1<BR/>gosh> (list (integ) (integ))<BR/>2<BR/>gosh> (list (integ) (integ))<BR/>3<BR/><BR/>4が返ってきてもよさそうなもの?k16https://www.blogger.com/profile/02349067627444091120noreply@blogger.comtag:blogger.com,1999:blog-9197115.post-2340335837832415592007-03-04T15:27:00.000+09:002007-03-04T15:27:00.000+09:00それ call/cc 関係ないんちゃいます?(define (integ) (let R ((n ...それ call/cc 関係ないんちゃいます?<BR/>(define (integ)<BR/> (let R ((n 0))<BR/> (set! integ (lambda () (R (+ n 1))))<BR/> (+ n 1)))<BR/><BR/>すなおなのは<BR/>(define integ<BR/> (let ((n 0))<BR/> (lambda () (set! n (+ n 1)) n)))<BR/><BR/>「ところで」の方は, いきなり (list (integ) (integ)) を評価すると無限ループ?<BR/>定義後まず (integ) を一度やっておけば数字(リストではない!)を順次返しますね.Anonymousnoreply@blogger.com