Article View: fj.lang.functional
Article #20Re: q
From: MAEDA Atusi/前田敦司
Date: Sun, 09 Feb 1997 00:00
Date: Sun, 09 Feb 1997 00:00
59 lines
3274 bytes
3274 bytes
SMLのraise/handleって,型付であることを除けばCommon Lispのcatch/throw
とおんなじ能力ではないでしょうか.
(defmacro handle (tag value handler)
`(block #1=#:not-thrown
(catch ,tag
(return-from #1# ,value))
,handler))
(handle 'f
;; value
(+ 1 ((lambda (g) (handle 'f
(funcall g 1)
1))
#'(lambda (y) (throw 'f y))))
;; handler
1)
=> 2
つまり,SMLのhandlerはCLのcatcherと同じくindefinite scope/dynamic extent
ですよね.
continuationはindefinite extentですから,SMLのraise/handleを用いて
call/ccを書くことはできません.
逆に,call/ccを使ってraise/handleやcatch/throwのようなものを書くことが
できるかというと,indefinite scope/dynamic extentの名前空間を持つ変数
というのが標準Schemeにはないので,簡単には書けない,という話では.
(実際にはfluid-letとか,call-with-dynamic-bindingなどという構文を持っ
た処理系が多いし,こういう構文がライブラリとして配布されているので,割
と簡単に書けてしまうでしょうけど.)
>>>>> "terada" == Minoru TERADA <terada@sanpo.t.u-tokyo.ac.jp> writes:
In article <TERADA.97Feb7215216@kirin.sanpo.t.u-tokyo.ac.jp> terada@sanpo.t.u-tokyo.ac.jp (Minoru TERADA) writes:
terada> dynamic bind の lisp の上にだって continuation は考えられるのでは
terada> ないでしょか. deep bind の古典的な evaluator だったら, 変数環境の
terada> a-list と コントロールスタックのペアをもてば十分かな?
a-listとスタックポインタで,catcherのような制限付の(dynamic extentを持
つ)continuationになりますね.first class continuationを作るには,スタッ
ク全体をコピーするとか,スタックをもともとヒープ上にとっておくとか,結
局Schemeと同じようなことをすることになりますが.
terada> また逆に, scheme でも, 独立した名前空間(ったって大域的な a-list で
terada> 十分ですけれど)を作ってやれば, dynamic な振舞いをさせられるわけで.
ですね.
terada> と考えると, continuation の方がエライ, という, 以前の記事
terada> (CMU の Technical Report でしたっけ?)とは逆の結論が出てし
terada> まうのがどうも...
でも,MLやLispでfirst class continuationを実現するには,言語の意味論自
体を拡張する必要があって,MLやLisp自身では書けないと思いますが.
前田敦司
Technical Details
Message-ID:
<MAD.97Feb9203219@tanzanite.math.keio.ac.jp>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<AKAMA.97Jan9005151@siena.is.s.u-tokyo.ac.jp>Show Full Headers
Complete Article Headers
X-Google-Language: Japanese,JIS X-Google-Thread: f5c49,590ed48083e6216 X-Google-Attributes: gidf5c49,public From: mad@math.keio.ac.jp (MAEDA Atusi/前田敦司) Subject: Re: q Date: 1997/02/09 Message-ID: <MAD.97Feb9203219@tanzanite.math.keio.ac.jp> X-Deja-AN: 217718098 sender: news@sync.cs.keio.ac.jp references: <AKAMA.97Jan9005151@siena.is.s.u-tokyo.ac.jp> content-type: text/plain; charset=ISO-2022-JP organization: Faculty of Sci. and Tech., Keio Univ., Yokohama, Japan. mime-version: 1.0 (generated by tm-edit 7.66) reply-to: mad@math.keio.ac.jp newsgroups: fj.lang.functional