这不是一篇介绍Lambda表达式与递归函数的随笔,而是介绍这方面知识的链接集合。
我承认,当我第一次读老赵的使用Lambda表达式编写递归函数时,晕得不行。我甚至把Func<int, int> fac = x => x <= 1 ? 1 : x * fac(x - 1);中的x <= 看成一种新的表达式符号-_-|||。然而第二次读的时候我又发现似乎没有那么晕,很多内容如果认认真真研究,也并不是一点头绪没有。
但是越深入越发现自己的浅薄。文中提到了不动点组合子的概念,在之前我闻所未闻。于是赶紧又去维基百科上补习这方面的知识。
文中还提到了Y组合子的推导过程,Madst的文章:Recursive lambda expressions(有意思的是Madst写完这篇blog后就销声匿迹了……),它“用真正递归定义的delegate实现Y组合子”。不过,这是一篇老赵都不能完全理解的文章,而且是全英文。我等之辈需找个月黑风高之夜,神清气爽之时,沐浴更衣之后,再去静心阅读。若能参透其中一二,当属荣幸之至。
对于Y组合子的实现,装配脑袋早在两年前就给出了推演过程,并自认为是“最纯的匿名版”。可以参考他的两篇文章:VS2008亮点:用Lambda表达式进行函数式编程以及用Lambda表达式进行函数式编程(续):用C#实现Y组合子。
Ivony...在半个月前详细地推演了Y组合子——Y组合子详解(再版试文)。他还有两篇文章Y组合子详解(一)和Y组合子详解(再版) 第一章:高阶函数和lambda表达式。最近又出了篇新文Y组合子推演简明版(上篇)。可以看出Ivony...正在试图总结出一个更易于理解的Y组合子的推演过程,让我们拭目以待。
厄,对了,还有两篇关于“伪”递归的讨论:反驳老赵之“伪”递归和驳“反驳老赵之“伪”递归”。再这样驳下去,从文字上都快“递归”了……
对于如何用Lambda表达式编写递归函数,实在不是一时半会儿就能掌握的,TX们是否还有其他链接和学习资料,希望能够无私地分享。