我试图用C#定义一个定点生成器,您会在许多功能语言中看到该定点生成器。我相信有时有时会根据定点生成器来定义文件夹。我将显示它是Haskell定义,然后显示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));
}

最佳答案

我对haskell或此运算符没有太多了解。但是我读过Mads Torgersen的一篇文章,内容涉及使用C#lambda表达式实现Y / Fix组合器。这可能对您有用,这里是link

这是他实现的最终方法:

public Func<T, T> Fix<T>(Func<Func<T,T>, Func<T,T>> F) {
  return t => F(Fix(F))(t);
}

关于c# - C#泛型中的定点生成器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8811834/

10-15 15:15