>>811
それって、ラムダの引数の数が変わると、recの流用ができなくなる。
素直に

a = Proc.new{
 f = lambda{|n|
  if n==0; 1 else n*f.call(n-1) end
 }
}.call

p a.call 7

って書いたほうがまし。