From: Tanaka Akira Date: 2002-08-12T22:33:38+09:00 Subject: [ruby-dev:17982] optimization module (Re: [ruby-list:35735] Re: tail recursion elimination) In article <200208101420.g7AEKSWN009284@smtp16.dti.ne.jp>, Takaaki Tateishi writes: > tail-recursion$B$N=|5n$K$b$&>/$7$-$D$$@)8B$,I,MW$J$N$G$9!%8=:_$O!$(B > > def fact_(x, c) > if( x == 1 ) # (1) > c.call(x) > else > fact_(x-1, proc{|n| x * c.call(n)}) # (2) > end > end > > $B$H$$$&4X?t$,$"$k$H!$(B(2)$B$N<0$NA0$K(B > > x,c = x-1, proc{|n| x * c.call(n)} > > $B$H$$$&B?=EBeF~$N<0$rA^F~$7$F!$$=$N8e$O(B(1)$B$NFbMF$rD>@\%3%T!<$7$F9=J8(B > $BLZ>e$G%k!<%W$r:n$C$F$$$^$9!%$=$N$?$a!$>e5-$N<0$O > def fact_(x, c) > again: > if( x == 1 ) > c.call(x) > else > x,c = x-1, proc{|n| x * c.call(n)} > goto again > end > end > > $B$N$h$&$J5?;w%3!<%I$GI=$;$^$9!%$"$H$G6I=jJQ?t$,;H$o$l$F$7$^$$$^$9$M!%(B > $B$3$N$h$&$K!$0z?t$K%V%m%C%/$r$H$k>l9g$K$OKvHx:F5"=|5n$r$7$J$$$h$&$K$7(B > $B$h$&$H;W$C$F$$$^$9!%(B $B$3$l$O?7$7$/@8@.$7$J$1$l$P$J$i$J$$6I=jJQ?t$r:FMxMQ$7$F$7$^$&$H$$$&OC$G(B $B$9$h$M!#(B Ruby $B$K$O(B block local variable $B$,$"$k$o$1$G!"$=$N$"$?$j$N5!9=$rMxMQ$7(B $B$FKh2s?7$7$$6I=jJQ?t$r@8@.$9$k$3$H$O$G$-$J$$$s$G$7$g$&$+(B? -- [$BEDCf(B $BE/(B][$B$?$J$+(B $B$"$-$i(B][Tanaka Akira] $B!V$U$($m(B! $B$o$+$a$A$c$s:n@o$G$9$(C"=$B!W(B(Little Worker, $B7KM7@84](B)