Thread View: fj.lang.functional
10 messages
10 total messages
Started by AKAMA Youji
Wed, 08 Jan 1997 00:00
q
Author: AKAMA Youji
Date: Wed, 08 Jan 1997 00:00
Date: Wed, 08 Jan 1997 00:00
34 lines
1754 bytes
1754 bytes
$B@V4V$H?=$7$^$9!#(B
$B$3$N(B newsgroup $B$r6=L#?<$/FI$^$;$FD:$$$F$^$9!#$$$m$$$mITJY6/$J$N$G$9$,!"(B
$B$3$l$+$i$b$h$m$7$/$*4j$$$7$^$9!#(B
$B$5$F!"(B $B%W%m%0%i%`8@8l(B $B#M#L$K$*$$$F!"(B exception, raise, handle $B$J$I$G!"(B
call/cc $B$_$?$$$J$3$H$,$I$l$/$i$$$G$-$k$N$G$7$g$&$+!)(B
Comment, $BJ88%%]%$%s%?!<$J$I65$($FD:$1$l$P9,$$$G$9!#(B
$B@V4V(B
$B!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a(B
Standard ML of New Jersey, Version 0.93, February 15, 1993
val it = () : unit
- val Peirce = fn w => let exception y of '1a in w(fn z => raise(y z)) handle (y x) => x end;
val Peirce = fn : (('1a -> 'b) -> '1a) -> '1a
$B$3$l$G$O(B call/cc $B$h$j<e$$$G$9$+$M!#!#!#!#(B
-----------------------------------------------------------------------------
$BEl5~Bg3X(B $BBg3X1!M}3X7O8&5f2J(B $B>pJs2J3X@l96(B $B@V4VM[Fs(B
--
-----------------------------------------------------------------------------
$BEl5~Bg3X(B $BBg3X1!M}3X7O8&5f2J(B $B>pJs2J3X@l96(B $B@V4VM[Fs(B
$B")#1#1#3(B $BEl5~ET(B $BJ85~6h(B $BK\6?#7!]#3!]#1(B $BM}3XIt>pJs2J3X2J(B
$B!J#T#E#L!K#0#3(B($B#3#8#1#2(B)$B#4#1#7#7!JD>DL!K!"#0#3(B($B#3#8#1#2(B)$B#2#1#1#1!JFb@~#4#0#9#7!K!"(B
$B!J#F#A#X!K#0#3(B($B#3#8#1#8(B)$B#1#0#7#3(B
Re: q
Author: Jacques Garrigue
Date: Wed, 22 Jan 1997 00:00
Date: Wed, 22 Jan 1997 00:00
30 lines
1894 bytes
1894 bytes
In article <AKAMA.97Jan9005151@siena.is.s.u-tokyo.ac.jp> akama@is.s.u-tokyo.ac.jp (AKAMA Youji) writes:
> $B$5$F!"(B $B%W%m%0%i%`8@8l(B $B#M#L$K$*$$$F!"(B exception, raise, handle $B$J$I$G!"(B
> call/cc $B$_$?$$$J$3$H$,$I$l$/$i$$$G$-$k$N$G$7$g$&$+!)(B
> $B!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a(B
> Standard ML of New Jersey, Version 0.93, February 15, 1993
> val it = () : unit
> - val Peirce = fn w => let exception y of '1a in w(fn z => raise(y z)) handle (y x) => x end;
> val Peirce = fn : (('1a -> 'b) -> '1a) -> '1a
> $B$3$l$G$O(B call/cc $B$h$j<e$$$G$9$+$M!#!#!#!#(B
$BNc30=hM}$H7QB3$H!"$I$A$i$b(Bgoto$B$_$?$$$J$3$H$,<BAu$G$-$k$+$i;w$F$$$k$H$$(B
$B$($P!";w$F$$$^$9$1$l$I$b!"0c$$$NJ}$,Bg$-$$$H;W$$$^$9!#(B
$BNc$($P!"(B($B0lEy(B)$B7QB3$O2?2s$G$b<B9T$G$-$k$,!">e$N$h$&$J$d$jJ}$G$O0l2s$7$+(B
$B$G$-$^$;$s!#Fs2sL\$O(Btoplevel$B$N%(%i!<$K$J$j$^$9!#A0$K$7$+%8%c%s%W$G$-$J(B
$B$$$h$&$J(Bgoto$B$G$9!#7?$,(Bcallcc$B$H;w$F$$$F$b!"I=8=NO$,0c$$$^$9!#(B
$B7QB3$K$D$$$FJ88%$O;3$[$I$"$j$^$9!#I=8=NO$KFC$K6=L#$,$"$k$J$i$P!"(BPOPL94
$B$N(BAndreszj Filinzki$B$NO@J8(B($B%b%J%I$r7QB3$G%(%s%3!<%I$9$k$b$N(B)$B$,LLGr$$$G(B
$B$7$g$&!#(B
$B<f6j(B
--
---------------------------------------------------------------------------
Jacques Garrigue Kyoto University garrigue@kurims.kyoto-u.ac.jp
<A HREF="http://wwwfun.kurims.kyoto-u.ac.jp/~garrigue/">JG</A>
Re: q
Author: AKAMA Youji
Date: Thu, 23 Jan 1997 00:00
Date: Thu, 23 Jan 1997 00:00
81 lines
4334 bytes
4334 bytes
$B<f6j(B $BMM!"(B
$B%U%)%m!<$"$j$,$H$&$4$6$$$^$7$?!#(B
$B<f6j(B> In article <AKAMA.97Jan9005151@siena.is.s.u-tokyo.ac.jp> akama@is.s.u-tokyo.ac.jp (AKAMA Youji) writes:
>> $B$5$F!"(B $B%W%m%0%i%`8@8l(B $B#M#L$K$*$$$F!"(B exception, raise, handle $B$J$I$G!"(B
>> call/cc $B$_$?$$$J$3$H$,$I$l$/$i$$$G$-$k$N$G$7$g$&$+!)(B
>> $B!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a(B
>> Standard ML of New Jersey, Version 0.93, February 15, 1993
>> val it = () : unit
>> - val Peirce = fn w => let exception y of '1a in w(fn z => raise(y z)) handle (y x) => x end;
>> val Peirce = fn : (('1a -> 'b) -> '1a) -> '1a
>> $B$3$l$G$O(B call/cc $B$h$j<e$$$G$9$+$M!#!#!#!#(B
$B<f6j(B> $BNc30=hM}$H7QB3$H!"$I$A$i$b(Bgoto$B$_$?$$$J$3$H$,<BAu$G$-$k$+$i;w$F$$$k$H$$(B
$B<f6j(B> $B$($P!";w$F$$$^$9$1$l$I$b!"0c$$$NJ}$,Bg$-$$$H;W$$$^$9!#(B
$B<f6j(B> $BNc$($P!"(B($B0lEy(B)$B7QB3$O2?2s$G$b<B9T$G$-$k$,!">e$N$h$&$J$d$jJ}$G$O0l2s$7$+(B
$B<f6j(B> $B$G$-$^$;$s!#Fs2sL\$O(Btoplevel$B$N%(%i!<$K$J$j$^$9!#A0$K$7$+%8%c%s%W$G$-$J(B
$B<f6j(B> $B$$$h$&$J(Bgoto$B$G$9!#7?$,(Bcallcc$B$H;w$F$$$F$b!"I=8=NO$,0c$$$^$9!#(B
$B$O$$!"$=$&$G$9$M!#(B
$B<f6j(B> $B7QB3$K$D$$$FJ88%$O;3$[$I$"$j$^$9!#I=8=NO$KFC$K6=L#$,$"$k$J$i$P!"(BPOPL94
$B<f6j(B> $B$N(BAndreszj Filinzki$B$NO@J8(B($B%b%J%I$r7QB3$G%(%s%3!<%I$9$k$b$N(B)$B$,LLGr$$$G(B
$B<f6j(B> $B$7$g$&!#(B
$B>pJs$r$"$j$,$H$&$4$6$$$^$9!#$H$j$"$($:!"%j%W%i%$$r$7$^$9!#<ALd$NGX7J$O!"(B
$B0J2<$NO@J8(B
Carl Gunter, Didier Remy, and Jon Riecke. A generalization of
exceptions and control in ML-like languages. In: 1995 Conference on
Functional Programming and Computer Architecture, pages 12-23, La
Jolla, CA, June 1995.
$B$K(B
It is folklore (the authors know of no published proof) that
neither exceptions nor continuations can be expressed as a
macro in terms of the other (at least if no references are
present), even though they are closely relate.
$B$H$"$k$3$H$rCN$C$F!"!V$3$l$ONI$/CN$i$l$?(B folklore $B$J$N$+!)(B $B$9$0M}2r$G(B
$B$-$k$b$N$+!)!W$H;d$,<aA3$H$7$J$+$C$?$3$H$G$9!#;d$O!";DG0$J$,$i(B call/cc
$B$H$+(B exception $B$H$+$,?H$K$7$_$F$^$;$s!#(B
$B!V(BCall/cc $B$,(B exception $B$r;H$C$F%^%/%m$H$7$FDj5A$G$-$J$$!W$O!"%U%)!<%^(B
$B%k$J>ZL@$O$o$+$j$^$;$s!#$G$b!"<f6j$5$s$N@bL@$G>/$746$8$,$o$+$j$^$7$?!#(B
$B$"$j$,$H$&$4$6$$$^$7$?!#(B
$B$=$N5U!V(BException $B$,(B Call/cc $B$r;H$C$F%^%/%m$H$7$FDj5A$G$-$J$$!W$K$D$$(B
$B$F$O!"OC$7$,HyL/$G$9!#(B
$B!z(B Mark Lillibridge, Exceptions Are Strictly More Powerful Than
Call/CC, CMU-CS-95-178 $B!J$A$g$C$HFI$s$@!K!'(B
$B$=$N$3$H$r%U%)!<%^%k$K>ZL@$7$F$$$k$3$H$K$J$C$F$$$k!#(B
$B!z(B $B<f6j$5$s$,>R2p$7$?(B Filinski $B$NO@J8!J$A$g$C$H8+$?!K!'(B
Exception (Monad) $B$r7QB3$K4X$9$k1i;;(B(shift, reset; call/cc $B$h(B
$B$j4qNo$@$H$$$o$l$F$$$k(B)$B$J$I$G(B represent $B$7$F$$$k!#(B
$B$&!<$`!#>pJs!&0l2H8@$r$*;}$A$NJ}$O$h$m$7$/65$($F2<$5$$!#(B
$B@V4V(B
-----------------------------------------------------------------------------
$BEl5~Bg3X(B $BBg3X1!M}3X7O8&5f2J(B $B>pJs2J3X@l96(B $B@V4VM[Fs(B
$B")#1#1#3(B $BEl5~ET(B $BJ85~6h(B $BK\6?#7!]#3!]#1(B $BM}3XIt>pJs2J3X2J(B
$B!J#T#E#L!K#0#3(B($B#3#8#1#2(B)$B#4#1#7#7!JD>DL!K!"#0#3(B($B#3#8#1#2(B)$B#2#1#1#1!JFb@~#4#0#9#7!K!"(B
$B!J#F#A#X!K#0#3(B($B#3#8#1#8(B)$B#1#0#7#3(B
--
-----------------------------------------------------------------------------
$BEl5~Bg3X(B $BBg3X1!M}3X7O8&5f2J(B $B>pJs2J3X@l96(B $B@V4VM[Fs(B
$B")#1#1#3(B $BEl5~ET(B $BJ85~6h(B $BK\6?#7!]#3!]#1(B $BM}3XIt>pJs2J3X2J(B
$B!J#T#E#L!K#0#3(B($B#3#8#1#2(B)$B#4#1#7#7!JD>DL!K!"#0#3(B($B#3#8#1#2(B)$B#2#1#1#1!JFb@~#4#0#9#7!K!"(B
$B!J#F#A#X!K#0#3(B($B#3#8#1#8(B)$B#1#0#7#3(B
Re: q
Author: Hiroshi NAKANO
Date: Mon, 27 Jan 1997 00:00
Date: Mon, 27 Jan 1997 00:00
66 lines
4159 bytes
4159 bytes
$BN6C+$NCfLn$H?=$7$^$9!#(B
In article <AKAMA.97Jan23162641@amsterdam.is.s.u-tokyo.ac.jp>
akama@is.s.u-tokyo.ac.jp (AKAMA Youji) writes:
| It is folklore (the authors know of no published proof) that
| neither exceptions nor continuations can be expressed as a
| macro in terms of the other (at least if no references are
| present), even though they are closely relate.
|
|$B$H(B$B$"$k$3$H$rCN$C$F!"!V$3$l$ONI$/CN$i$l$?(B folklore $B$J$N$+!)(B $B$9$0M}2r$G(B
|$B$-$k$b$N$+!)!W$H;d$,<aA3$H$7$J$+(B$B$C$?$3$H$G$9!#;d$O!";DG0$J$,$i(B call/cc
|$B$H$+(B exception $B$H$+$,?H$K$7$_$F$^$;$s!#(B
$B@N$N(B LISP $B$G$h$/;H(B$B$o$l$F$$$^$7$?$,!"JQ?t$N(B dynamic binding $B$H$$$&(B
semantics $B$,$"$j$^$9$h$M!#(B Common Lisp $B$@$HIaDL$O(B lexical binding $B$G$9(B
$B$,!"JQ?t$r(B special $B$H@k8@$9$k$H!"$?$7$+$3$N(B dynamic binding $B$b$G$-$k$s(B
$B$8$c$J$+$C$?(B$B$+$H;W$$$^$9!#(B
call/cc $B$H(B ML $B$N(B raise/handle $B$,$I$&$b$&$^$/3z$_9g$o$J$$$N$O!"(Bcall/cc
$B$,(B lexical binding $B$J$N$KBP$7!"0lJ}$N(B raise/handle $B$,(B dynamic binding
$B$@$+$i$G$9!#(B
$B$3$NFs$D$N0c$$$O(B scope $B$H(B extent $B$H$$$&8@MU$GI=8=$5$l$k$3$H$,B?$$$h$&(B
$B$G$9$,!"(Bcall/cc $B$H(B raise/handle $B$N4X78$rI=$K$9$k$H!"(B
\ $B7QB3(B $B$N(B scope |
\---------------+--------------+
$B7QB3$N(B extent \ lexical | indefinite |
\ (static) | (dynamic) |
----------------------------------+------------+--------------+
indefinite (static) | | |
($B$=$N7QB3$X$N;2>H$r;D(B$B$7$F$*$1$P(B | call/cc | ??? |
$B$$$D$G$b$=$l$r;HMQ$G$-$k(B) | | |
----------------------------------+------------+--------------+
dynamic | | |
($B7QB3$r@8@.$7$?9=J8MWAG$N<B9T$,(B | ??? | raise/handle |
$B=*N;$7$?$i$=$N<BBN$O<:$o$l$k(B) | | |
----------------------------------+------------+--------------+
$B$_$?$$$J46$8$8$c$J$$$+$H;W$$$^$9!#(B $BEvA3Fs$D$N(B ??? $B$KBP1~$9$k$b$N$bM-$j(B
$BF@(B$B$k$o$1$G$9$,!"$I$&$b(B($BH>(B)$B<BMQE*$J%W%m%0%i%_%s%08@8l$G$O$"$^$j8+$+$1$^(B
$B$;$s$M!#(B Common Lisp $B$N(B catch/throw $B$b(B dynamic binding $B$G$9$7!#(B
# C $B$N(B setjmp/longjmp $B$J$s$+$O!"(Blexical scope + dynamic extent $B$H9M$((B
# $B$k$3$H$b$G$-$^$9$,(B ... $B$D$$$G$K(B break $B$J$s$+$b(B ... :-)
|$B$=$N5U!V(BException $B$,(B Call/cc $B$r;H$C$F%^%/(B$B%m$H$7$FDj5A$G$-$J$$!W$K$D$$(B
|$B$F$O!"OC$7$,HyL/$G$9!#(B
|
|$B!z(B Mark Lillibridge, Exceptions Are Strictly More Powerful Than
|Call/CC, CMU-CS-95-178 $B!J$A$g$C$HFI$s$@!K!'(B
|
| $B$=$N$3$H$r%U%)!<%^%k$K>ZL@(B$B$7$F$$$k$3$H$K$J$C$F$$$k!#(B
$B$3$NO@J8$G$OFC$K?($l$F$$$J$+$C$?$+$bCN$l$^$;$s$,!"!V(BException $B$,(B
Call/cc $B$r;H$C$F%^%/%m$H$7$FDj5A$G$-$J$$!W$N$O!"7QB3$N(B extent $B$N0c$$$O(B
$B$I$&$G$b$h$/$F!"(Bscoping $B$,(B static $B$+(B dynamic $B$+$N0c$$$NJ}$,K\<AE*$G$9!#(B
scoping $B$,F1$8$J$i!"EvA3(B call/cc $B$G(B raise/handle $B$,=q$1$^$9!#(B
# $B$=(B$B$&$$$($P!"(Bcall/cc $B$,(B raise/handle $B$r;H$C$?%^%/%m$G=q$1$J$$$H$$$&$N(B
# $B$O!"$I$&<($7$?$i$$$$$s$G$7$g$&$+(B??? $B$b$C$H$b!"$=$N$?$a$K$O!"%^%/%m$H(B
# $B$O2?$+!"$H$$$&$3$H$r$O$C$-$j$5$;$H$+$J$$$H$$$1$J$$$s$G$7$g$&$1(B$B$l$I(B ...
--
Hiroshi Nakano <nakano@rins.ryukoku.ac.jp>
Ryukoku Univ., Seta, Otsu, Japan
Re: q
Author: Minoru TERADA
Date: Tue, 04 Feb 1997 00:00
Date: Tue, 04 Feb 1997 00:00
24 lines
1497 bytes
1497 bytes
$B;{ED$C$F$$$$$^$9(B.
$B$^$:$O$8$a$K(B.
call/cc $B$C$F(B scheme $B$K$"$k%"%l$N$3$H$G$9$h$M(B?
In article <NAKANO.97Jan27151745@dugong37.math.ryukoku.ac.jp>
nakano@math.ryukoku.ac.jp (Hiroshi NAKANO) writes:
>
> call/cc $B$H(B ML $B$N(B raise/handle $B$,$I$&$b$&$^$/3z$_9g$o$J$$$N$O!"(Bcall/cc
> $B$,(B lexical binding $B$J$N$KBP$7!"0lJ}$N(B raise/handle $B$,(B dynamic binding
> $B$@$+$i$G$9!#(B
>
> $B$3$NFs$D$N0c$$$O(B scope $B$H(B extent $B$H$$$&8@MU$GI=8=$5$l$k$3$H$,B?$$$h$&(B
> $B$G$9$,!"(Bcall/cc $B$H(B raise/handle $B$N4X78$rI=$K$9$k$H!"(B
$B$9$$$^$;$s(B, $B!V7QB3$N(B scope$B!W$H$$$&35G0$,(B
$B$h$/$o$+$i$J$$$b$s$G(B, $B$I$J$?$+$A$g$C$H@bL@$7$F$$$?$@$1$^$;$s$G$7$g$&$+(B.
$B%^%5%+(B call/cc $B$KM?$($?4X?t$N0z?t$H$7$F(B continuation $B$,<j$KF~$k$+$i(B,
$B$H$$$&$N$8$c$J$$$G$9$h$M(B?
$B$?$7$+$K$=$N0z?t$H(B continuation $B$N(B binding $B$O@EE*$G$9$1$l$I(B.
object $B$H$7$F$N(B continuation $B$K$O!VL>A0!W$,$J$$$+$i(B,
scope $B$C$F$N$,9M$($i$l$J$$(B...
Re: q
Author: Hiroshi NAKANO
Date: Wed, 05 Feb 1997 00:00
Date: Wed, 05 Feb 1997 00:00
49 lines
2462 bytes
2462 bytes
In article <TERADA.97Feb4175227@kirin.sanpo.t.u-tokyo.ac.jp>
terada@sanpo.t.u-tokyo.ac.jp (Minoru TERADA) writes:
|$B$^$:$O$8$a$K(B.
|call/cc $B$C$F(B scheme $B$K$"$k%"%l$N$3$H$G$9$h$M(B?
$B$O(B$B$$!#(B
|$B$9$$$^$;$s(B, $B!V7QB3$N(B scope$B!W$H$$$&35G0$,(B
|$B$h$/$o$+$i$J$$$b$s$G(B, $B$I$J$?$+$A$g$C$H@bL@$7$F$$$?(B$B$@$1$^$;$s$G$7$g$&$+(B.
$B!V7QB3$N(B scope$B!W$d!V7QB3$N(B extent $B!W$H$$$&8@$$J}$,NI$/$J$+$C$?$G$9$M!#(B
$B@53N$K(B$B$O!V7QB3$r;2>H$9$kJQ?t(B($BL>A0$N(B) scope$B!W$d!V(Bextent$B!W$G$9!#(B
|$B%^%5%+(B call/cc $B$KM?$($?4X?t$N0z?t$H$7$F(B continuation $B$,<j$KF~$k$+$i(B,
|$B$H$$$&$N$8$c$J$$$G$9$h$M(B?
$B$(!<$H!"7k6I$O$=$N$H$*$j$G$9!#(B Scheme $B$@$H7Q(B$BB3$r;2>H$9$kJQ?t$bB>$NJQ?t(B
$B$HF1$8$h$&$K07$o$l$^$9$+$i(B ...
$BCfLn$,!V(Bscope$B!W$H8@$C$?$H$-$K$O!"(B Scheme $B$N(B
(call/cc (lambda (f) (... (f x) ...)))
$B$r(B SML $B$N(B
(... (raise (f x)) ...) handle (f x) => x
$B$HBP(B$BHf$7$F!"$3$N(B f $B$N(B scope (raise $B$N(B f $B$H(B handle $B$N(B f $B$H$NBP1~(B)$B$r9M$((B
$B$F$$$^$7$?!#(B Scheme $B$G$O(B($BIaDL$NJQ?t(B$B$G$9$+$i(B) lexical scope $B$r;}$C$F$$(B
$B$^$9$,!"0lJ}(B SML $B$G$O(B indefinite (dynamic) scope $B$K$J$j$^$9!#(B $B$?$H(B$B$($P!"(B
(call/cc (lambda (f)
(+ 1 ((lambda (g) (call/cc (lambda (f) (g 1))))
(lambda (y) (f y))))))
$B$r(B Scheme $B$GI>2A$9$k$H(B 1 $B$K$J$j$^$9$,!"$3$l$KBP1~$9$k(B
let exception f of int in
(1 + (fn g => g(1) handle (f x) => x)(fn y => raise(f y)))
handle (f x) => x end
$B$r(B SML $B$GI>2A$9$k$H(B 2 $B$K$J$C$F$7$^$$$^$9!#(B $B$b$A(B$B$m$s$3$N;~!"(B extent $B$N(B
$BJ}$N0c$$$O4X78$7$F$$$^$;$s!#(B
# $B$A$c$s$H@bL@$G$-$?$+$I$&$+$A$g$C$HIT0B$G$9(B ... ;-<
--
Hiroshi Nakano <nakano@rins.ryukoku.ac.jp>
Ryukoku Univ., Seta, Otsu, Japan
Re: q
Author: kuroda KURODA Hisao
Date: Thu, 06 Feb 1997 00:00
Date: Thu, 06 Feb 1997 00:00
63 lines
2652 bytes
2652 bytes
In article <NAKANO.97Feb5104254@orca20.math.ryukoku.ac.jp> nakano@math.ryukoku.ac.jp (Hiroshi NAKANO) writes:
| 中野が「scope」と言ったときには、 Scheme の
|
| (call/cc (lambda (f) (... (f x) ...)))
|
| を SML の
|
| (... (raise (f x)) ...) handle (f x) => x
|
| と対比して、この f の scope (raise の f と handle の f との対応)を考え
| ていました。 Scheme では(普通の変数ですから) lexical scope を持ってい
| ますが、一方 SML では indefinite (dynamic) scope になります。 たとえば、
^^^^^^^^^^^^^^^^^^^^^^^^^^
indefiniteがSchemeでdynamicがSMLなのではありませんか?
| (call/cc (lambda (f)
| (+ 1 ((lambda (g) (call/cc (lambda (f) (g 1))))
| (lambda (y) (f y))))))
|
| を Scheme で評価すると 1 になりますが、これに対応する
|
| let exception f of int in
| (1 + (fn g => g(1) handle (f x) => x)(fn y => raise(f y)))
| handle (f x) => x end
|
| を SML で評価すると 2 になってしまいます。 もちろんこの時、 extent の
| 方の違いは関係していません。
|
| # ちゃんと説明できたかどうかちょっと不安です ... ;-<
Schemeの継続がindefinite extentを持つことを示したいのであれば、
> (define ccc #f)
> (+ 1 (call/cc (lambda (cc)
(set! ccc cc)
(+ 2 (cc 3)))))
4
> (ccc 100)
101
で十分でないでしょうか?一方、Common Lispですと(SMLで書けないものですみ
ません)、
>(+ 1 (catch 'tag (progn (+ 2 (throw 'tag 3)))))
4
>(throw 'tag 100)
Error: TAG is an undefined tag.
Fast links are on: do (si::use-fast-links nil) for debugging
Error signalled by EVAL.
Broken at THROW. Type :H for Help.
>>
のようなかんじでdynamicである、というのが言えると思います。
;;; $Id: .signature,v 1.3 1996/09/20 07:06:26 kuroda Exp $
(define (くろだ ひさお)
(email kuroda@msi.co.jp))
Re: q
Author: Minoru TERADA
Date: Fri, 07 Feb 1997 00:00
Date: Fri, 07 Feb 1997 00:00
85 lines
4336 bytes
4336 bytes
$B;{ED$C$F$$$$$^$9(B.
$B$4@bL@$"$j$,$H$&$4$6$$$^$7$?(B.
$BB4O@$GK;$7$/$C$F$*JV;v$,CY$l$^$7$?(B.
In article <NAKANO.97Feb5104254@orca20.math.ryukoku.ac.jp>
nakano@math.ryukoku.ac.jp (Hiroshi NAKANO) writes:
> |$B$9$$$^$;$s(B, $B!V7QB3$N(B scope$B!W$H$$$&35G0$,(B
> |$B$h$/$o$+$i$J$$$b$s$G(B, $B$I$J$?$+$A$g$C$H@bL@$7$F$$$?$@$1$^$;$s$G$7$g$&$+(B.
>
> $B!V7QB3$N(B scope$B!W$d!V7QB3$N(B extent $B!W$H$$$&8@$$J}$,NI$/$J$+$C$?$G$9$M!#(B
> $B@53N$K$O!V7QB3$r;2>H$9$kJQ?t(B($BL>A0$N(B) scope$B!W$d!V(Bextent$B!W$G$9!#(B
>
> |$B%^%5%+(B call/cc $B$KM?$($?4X?t$N0z?t$H$7$F(B continuation $B$,<j$KF~$k$+$i(B,
> |$B$H$$$&$N$8$c$J$$$G$9$h$M(B?
>
> $B$(!<$H!"7k6I$O$=$N$H$*$j$G$9!#(B Scheme $B$@$H7QB3$r;2>H$9$kJQ?t$bB>$NJQ?t(B
> $B$HF1$8$h$&$K07$o$l$^$9$+$i(B ...
$B$J$k$[$I(B, $B$=$&$$$&$3$H$G$7$?$+(B.
> $BCfLn$,!V(Bscope$B!W$H8@$C$?$H$-$K$O!"(B Scheme $B$N(B
>
> (call/cc (lambda (f) (... (f x) ...)))
>
> $B$r(B SML $B$N(B
>
> (... (raise (f x)) ...) handle (f x) => x
>
> $B$HBPHf$7$F!"$3$N(B f $B$N(B scope (raise $B$N(B f $B$H(B handle $B$N(B f $B$H$NBP1~(B)$B$r9M$((B
> $B$F$$$^$7$?!#(B Scheme $B$G$O(B($BIaDL$NJQ?t$G$9$+$i(B) lexical scope $B$r;}$C$F$$(B
> $B$^$9$,!"0lJ}(B SML $B$G$O(B indefinite (dynamic) scope $B$K$J$j$^$9!#(B $B$?$H$($P!"(B
>
> (call/cc (lambda (f)
> (+ 1 ((lambda (g) (call/cc (lambda (f) (g 1))))
> (lambda (y) (f y))))))
>
> $B$r(B Scheme $B$GI>2A$9$k$H(B 1 $B$K$J$j$^$9$,(B
$B$3$l$O(B, 2$B9TL\$N(B (g 1) -- $B$3$N$H$-(B g $B$O(B 3$B9TL\$N(B (lambda(y)(f y))
$B$H$$$&4X?t(B($B%/%m!<%8%c(B)$B$K$J$C$F$k(B -- $B$NI>2A$K$h$C$F;H$o$l$k(B f $B$,(B,
2$B9TL\$N(B f $B$G$J$/(B 1$B9TL\$N(B f $B$K$J$C$F$$$k(B, $B$H$$$&$3$H$G$9$M(B.
$B$3$l$OMW$9$k$K(B scheme $B$O(B static scope $B$G$"$k(B, $B$H$$$&$3$H$G$9$M(B.
> $B$3$l$KBP1~$9$k(B
>
> let exception f of int in
> (1 + (fn g => g(1) handle (f x) => x)(fn y => raise(f y)))
> handle (f x) => x end
>
> $B$r(B SML $B$GI>2A$9$k$H(B 2 $B$K$J$C$F$7$^$$$^$9!#(B
$B$3$A$i$O(B, raise(f y) $B$K$h$k(B f $B$,(B, 2$B9TL\$N(B($B$9$J$o$AFbB&$N(B) handle $B$G(B
$BDj5A(B($B$C$F$$$&$N$+$J(B?)$B$5$l$?(B f $B$H$J$k(B, $B$H$$$&$3$H$J$o$1$G$9$M(B.
$B$?$7$+$K(B dynamic bind $B$HF1$8?6Iq$$$r$7$^$9$M(B.
($B$^$"$=$b$=$b(B exception handling $B$,@EE*$K$7$+$G$-$J$$$H$$$&$N$O(B
$B$[$H$s$I0UL#$J$$$G$9$+$i$M(B. $B$=$l$J$i(B goto $B$G==J,(B)
$B$G(B, $B0c$$$O$o$+$C$?$N$G$9$,(B, $BKM$K$O$=$l$,%9%3!<%W$N0c$$$+(B,
$B$H$$$&$N$,%$%^%$%A$O$C$-$j$7$J$$$N$G$9(B.
$B$`$7$m(B, continuation $B$O$=$l<+?H$OL>A0$r;}$?$J$$(B object $B$G$"$k$N$K(B
$BBP$7$F(B, (SML $B$O<B$ONI$/CN$i$J$$$N$@$1$l$I(B) exception $B$H$$$&$N$O(B
$BFHN)$7$?L>A06u4V$r$b$C$F(B, $B$=$l$K$h$C$F$@$1;2>H$5$l$k$h$&$J(B
$B$b$N$J$N$@(B, $B$H$$$&$N$,0c$$$J$N$8$c$J$$$G$7$g$&$+(B.
continuation $B$H$$$&5!9=$=$N$b$N$K$O(B scope $B$H$$$&(B
$B35G0$O$D$$$F$J$/$F(B, $B$?$^$?$^(B scheme $B$NJQ?t$N(B binding $B$,(B
$B@EE*$G$"$C$?$@$1$G$O$J$$$G$9$+$M$((B.
dynamic bind $B$N(B lisp $B$N>e$K$@$C$F(B continuation $B$O9M$($i$l$k$N$G$O(B
$B$J$$$G$7$g$+(B. deep bind $B$N8EE5E*$J(B evaluator $B$@$C$?$i(B, $BJQ?t4D6-$N(B
a-list $B$H(B $B%3%s%H%m!<%k%9%?%C%/$N%Z%"$r$b$F$P==J,$+$J(B?
$B$^$?5U$K(B, scheme $B$G$b(B, $BFHN)$7$?L>A06u4V(B($B$C$?$C$FBg0hE*$J(B a-list $B$G(B
$B==J,$G$9$1$l$I(B)$B$r:n$C$F$d$l$P(B, dynamic $B$J?6Iq$$$r$5$;$i$l$k$o$1$G(B.
...
$B$H9M$($k$H(B, continuation $B$NJ}$,%(%i%$(B, $B$H$$$&(B, $B0JA0$N5-;v(B
(CMU $B$N(B Technical Report $B$G$7$?$C$1(B?)$B$H$O5U$N7kO@$,=P$F$7(B
$B$^$&$N$,$I$&$b(B...
Re: q
Author: 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自身では書けないと思いますが.
前田敦司
Re: q
Author: MAEDA Atusi/前田敦司
Date: Mon, 10 Feb 1997 00:00
Date: Mon, 10 Feb 1997 00:00
39 lines
1573 bytes
1573 bytes
自己フォローです.
mad> (defmacro handle (tag value handler)
mad> `(block #1=#:not-thrown
mad> (catch ,tag
mad> (return-from #1# ,value))
mad> ,handler))
mad> (handle 'f
mad> ;; value
mad> (+ 1 ((lambda (g) (handle 'f
mad> (funcall g 1)
mad> 1))
mad> #'(lambda (y) (throw 'f y))))
mad> ;; handler
mad> 1)
mad> => 2
これ,
(defmacro handle (tag value handler)
`(block #1=#:not-thrown
(multiple-value-call ,handler
(catch ,tag
(return-from #1# ,value)))))
(handle 'f
;; value
(+ 1 ((lambda (g) (handle 'f
(funcall g 1)
#'(lambda (x) x)))
#'(lambda (y) (throw 'f y))))
;; handler
#'(lambda (x) x))
とした方が感じ出てますね.
前田敦司
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads