From: Pit Capitain Date: 2001-08-29T18:36:41+09:00 Subject: [ruby-talk:20507] Re: recursive lambda forms On 29 Aug 2001, at 12:19, Alexander Schofield wrote: > Nat Pryce wrote: > > factorial = proc do |x| > > (x == 1) ? 1 : (x * factorial.call( x-1 )) > > end > > That certainly works, and serves to show why a truly anonymous > recursive Proc would be a small improvement at best, but it would > still be nice to have one with true anonymity (in both scopes) I hoped to find a way to write something like rp = refproc { |n| n>1 ? n * selfproc[n-1] : 1 } but I couldn't get the identifier "selfproc" into the block. The construct I came up with is not as nice, but as an advantage you can choose the name you want to use for the recursive Proc: rp = ref { |sp| proc { |n| n>1 ? n * sp[n-1] : 1 } } p rp[5] It uses a form of Jim's Y combinator: def ref( &orgproc ) proc { |f| f[f] } [ proc { |f| orgproc[ proc { |*x| f[f][*x] } ] } ] end This seems to work with other argument lists as well. Pit