我試圖在C#中定義一個定點生成器,你可以在許多函數式語言中看到它。我相信foldr通常是根據定點生成器來定義的。我將展示它的Haskell定義,然後展示C#中的內容。任何幫助是極大的讚賞。C#泛型中的定點生成器
//Haskell
fix f = f (fix f)
//C# (Many attempts)
public static Func<Func<T, T>, T> Combinator1<T>(this Func<T, T> f)
{
return x => f(Combinator1(f)(x));
}
public static Func<Func<T, T>, T> Combinator2<T>(this Func<T, T> f)
{
return x => x(Combinator2(x)(f));
}
public static Func<T, U> Combinator3<T, U>(Func<Func<T, U>, Func<T, U>> f)
{
return f(x => Combinator3(f)(x));
}
你看到什麼問題? – JaredPar 2012-01-10 23:05:14
@JaredPar我還沒有嘗試過構建任何函數,只是試圖讓定義正確。謝謝。 – 2012-01-10 23:11:50
那麼你在問什麼? – JaredPar 2012-01-10 23:15:58