C#:与Lambda表达式
问题描述:
递归函数以下不会编译:C#:与Lambda表达式
Func<int, int> fac = n => (n <= 1) ? 1 : n * fac(n - 1);
局部变量“FAC”可能不会 访问
之前,你怎么能与一个递归函数初始化lambda表达式?
[更新]
这里还有两个环节,我发现有趣的阅读:
答
的功能,这种特殊的风格是不支持由C#作为单行声明。你必须声明和定义分离成2线
Func<int, int> fac = null;
fac = n => (n <= 1) ? 1 : n * fac(n - 1);
答
你必须创建fac
第一UND以后分配给它(这是相当非功能,因为它取决于多种分配),或者使用所谓的Y-combinators
。
例子:
delegate Func<TIn, TOut> FixedPointFunction<TIn, TOut>(Func<TIn, TOut> f);
static Func<T, TRes> Fix<T, TRes>(FixedPointFunction<T, TRes> f) {
return f(x => Fix(f)(x));
}
static void Main(string[] args) {
var fact = Fix<int, int>(f => x => (x <= 1) ? x : x * f(x - 1));
Console.WriteLine(fact(5));
}
但是请注意,这可能是有点难以读取/理解。
答
好吧,如果您只是输入“为什么递归lambda会导致明确的赋值错误?”进入一些搜索引擎,你会在我的文章中找到关于这个主题的答案。
:-)
你真的想这样做在同一行?这看起来像一个噩梦的可维护性和理解... – Ian 2009-07-03 12:36:15
好吧,也许只是一个概念 – 2009-07-03 12:37:01