07/08/29 01:31:52
URLリンク(blogs.msdn.com)
これ読んだらちょっと分かってきた
public static class Fun<T>
{
public delegate U SelfApplicable<U>(SelfApplicable<U> self);
public static SelfApplicable<Func<Func<Func<T, T>, Func<T, T>>, Func<T, T>>>
Y = y => f => x => f(y(y)(f))(x);
public static Func<Func<Func<T, T>, Func<T, T>>, Func<T, T>> Fix = Y(Y);
}
public static Func<T,T> Fix<T>(Func<Func<T, T>, Func<T, T>> func)
{
return Fun<T>.Fix(func);
}
これを使えば、
var fact1 = Fix<int>(fac => x => x == 0 ? 1 : x * fac(x - 1));
こうやってすっきり書けるわけか
しかしここまでやる意味あるのかな