相关疑难解决方法(0)

在C#中使用Y Combinator

我试图弄清楚如何在一行中编写递归函数(例如阶乘,尽管我的函数要复杂得多).为此,我想到了使用Lambda Calculus的 Y组合器.

这是第一个定义:

Y = ?f.(?x.f(x x))(?x.f(x x))
Run Code Online (Sandbox Code Playgroud)

这是减少的定义:

Y g = g(Y g)
Run Code Online (Sandbox Code Playgroud)

我尝试用C#编写它们:

// Original
Lambda Y = f => (new Lambda(x => f(x(x)))(new Lambda(x => f(x(x)))));
// Reduced
Lambda Y = null; Y = g => g(Y(g));
Run Code Online (Sandbox Code Playgroud)

(Lambda是一个Func<dynamic, dynamic>.我首先尝试用它来键入它using,但这不起作用,所以现在它定义了delegate dynamic Lambda(dynamic arg);)

我的阶乘lambda看起来像这样(改编自这里):

Lambda factorial = f => new Lambda(n =>  n == 1 ? 1 : n * f(n - 1)); …
Run Code Online (Sandbox Code Playgroud)

c# lambda functional-programming function y-combinator

23
推荐指数
1
解决办法
1695
查看次数