“匿名递归”?它在Mono中我几天前在“C#AnonymousRecursion”中看到了这个站点。本文的要点是以下代码在C#中不起作用:Funcfib=n=>n>1?fib(n-1)+fib(n-2):n;然后,文章详细介绍了如何使用currying和Y-combinator回到C#中的“匿名递归”。这很有趣,但恐怕对我的日常编码来说有点复杂。至少在这一点上……我喜欢看自己的东西,所以我打开了MonoCSharpREPL并输入了那一行。没有错误。所以,我输入了fib(8);.令我惊讶的是,它奏效了!REPL回复21!我想也许这可能是REPL的魔法,所以我启动了“vi”,输入了以下程序,然后它编译了。使用系统;公共类程序{publicstaticvoidMain(string[]args){intx=int.解析(参数[0]);函数fib=n=>n>1?fib(n-1)+fib(n-2):n;控制台.WriteLine(fib(x));它也可以完美地构建和运行!我在Mac上运行Mono2.10。我现在无法访问Windows机器,因此无法在Windows上的.NET上进行测试。这在.NET上是固定的还是Mono的静音功能?这篇文章已有好几年了。如果它只是单声道,我等不及下一次面试,他们要求我用我选择的语言(MonoC#)编写Fibinocci函数,我必须提供.NET无法工作的警告。好吧,实际上我可以等待,因为我热爱我的工作。仍然很有趣......更新:Mono并没有真正进行“匿名”递归,因为它使用fib作为命名委托。我的错。事实上,MonoC#编译器在分配fib之前假定它为空值是错误的,如下所述。我说“编译器”是因为即使.NETC#编译器无法编译代码,.NETCLR也能很好地运行生成的程序集。对于那里的所有采访纳粹分子:Funcfib=n=>n>1?fib(n-1)+fib(n-2):n;可以替换为迭代版本:Funcfib=n=>{intold=1;国际电流=1;下一个;for(inti=2;i
