Fight the Future

Java言語とJVM、そしてJavaエコシステム全般にまつわること

ScalaでのY Combinator

case class B[F,T](c: B[F, T] => (F => T)) extends (B[F, T] => (F => T)) {  
  def apply(b: B[F, T]) = c(b);  
}  
def Y[F, T] = (f: (F => T) => F => T) =>  
  B[F, T](x => f(x(x)(_)))(B(x => f(x(x)(_))))    
val factorial = Y[Int, Int](f => i => if (i <= 0) 1 else f(i - 1) * i)  
factorial(6) == 720  

ScalaでY Combinatorを実装するとこうだって。。。
Cool!とか書いてるけど、まだ何がCoolなのかわからんw
Y Combinatorの定義も説明できるほどわかってないし。。。


まあそもそもこういう理論的な概念をすぐ理解しようとするのが虫のいい話で。
モナドとともに僕のわかってないリストに入れておきます。
折に触れてもう1度学んでいって、2、3年後にはきちんと理解したいなあ。