#なんか当時から簡単ではなさそうというのは感じてたけど。
#学会員じゃないと中身は閲覧できないのかな。
#IPSJはもう会員やめちゃったからなあ。でもアブストの印象では、意味論でちゃんと書くのが大変だけどやりました、っていう話のようにも見える。アドホックな実装としては動的環境を部分継続と一緒に切り出して、継続をつなぎ変える度に動的環境の木を辿ってthunkを実行してけばいいんじゃないかと思うんだけど、どうなんだろ。
#以前報告したCygwinやFreeBSDでmutexリソースがリークする件ですが、よく使いそうなthread-sleep!とポートにdestroyを入れたパッチです: https://github.com/cryks/Gauche/commit/e25328dc72f63088aa4e9c2e15dbaaef535d90ac #http://www.jst.go.jp/kisoken/presto/evalution/posteriori/kinou_1.pdf 研究課題名:プログラムのメタレベルを表現・操作する言語機構(亀山 幸義) にそれらしきことが書いてあるようなのですが、理解不能です。(すみません) #http://www.pps.univ-paris-diderot.fr/~saurin/tpdc2011/TPDC-2011-informal-proceedings.pdf First International Workshop on the
Theory and Practice of Delimited Continuations
(TPDC 2011)
#>cryksさん、ありがとうございます。commit&pushしておきました。
#話が前に戻りますが、多値は一つの変数に保存できないでありますけれども、多値の評価を遅延したpromiseなら変数に持てるわけなので、これを使うと、多値を変数に保存したかのように扱えるということになるのだろうか、と思いました。多値は手続きから手続きへの継続時に表れるので、どうしても必要になるまで遅延してしまうという。
#ならば、thunkでもいいではないか?と思ったのでありますが、thunkを識別する型がないわけで、promiseなら識別できる。delayとvaluesはやっていることはまったく逆なのですが、外から見た表現はとてもよく似ている。
#gosh> (define x (delay (quotient&remainder 13 3)))
x
gosh> (force x)
4
gosh> (quotient&remainder 13 3)
4
1
gosh>
#なのですが、実際やってみると、うまくないことがわかってしまいました。
#> (define x (delay (values 1 2 3)))
> x
#<promise:x>
> (force x)
1
2
3
;; racket 5.3.3です
##;2> (define x (delay (values 1 2 3)))
#;3> (force x)
1
2
3
;; chicken 4.7.0
#R5RS的には多値を返す式のdelayはunspecifiedですね.
#R7RS draft 9でも同様でした.