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年後にはきちんと理解したいなあ。