🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fj.lang.functional
Article #20

Re: q

#20
From: MAEDA Atusi/前田敦司
Date: Sun, 09 Feb 1997 00:00
59 lines
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-mail
References: <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