Y-combinator  [algorithm]

再帰的な関数を無名で扱うためのアルゴリズム。

rubyの例:

 Y= proc{|g|
    proc{|f|
      g[f[f]]
    }[
      proc{|f|
        g[proc{|y| f[f][y]}]
      }
    ]
  }
  fact = proc {|f| proc{|n| n==0 ? 1: n * f[n-1]}}
  p Y[fact][5] #=> 120