one*_*els 37 functional-programming y-combinator
我最近一直在阅读关于函数式编程的一些内容,我正试图找到Y-Combinator.我知道您可以使用Y-Combinator以不直接支持递归的语言有效地实现递归.但是,我可能使用的每种语言都支持递归,所以我不确定使用Y-Combinator是多么有用.
是否有一个更好的Y-Combinator使用实例,我错过了?有没有人真正在实际生产代码中使用过一个?或者使用Y-Combinator真的只是一个令人费解的学术练习(尽管很酷).
Nor*_*sey 27
我将不同意其他答案:定点(Y)组合器确实有实际的应用,但它需要一个非常富有想象力的头脑才能找到它们.像布鲁斯麦克亚当.以下是他的论文摘要:关于包装它:
用于计算固定点的Y组合器可以用标准ML表示.它经常被用作高阶函数的幂的一个例子,但通常不被认为是有用的编程结构.在这里,我们看看基于Y组合器和包装器的编程技术如何能够为程序员提供对函数内部工作的一定程度的控制,否则可能无需重写和重新编译代码.作为实验,使用该技术实现类型推断算法W,从而产生对算法具有最小干扰的错误消息.此示例程序的代码说明了概念的真正有用性以及它们的易用性.还讨论了许多其他实现技术和可能的应用程序,包括使用高阶函数来模拟异常和延续的使用.
这是一篇很棒的论文; 对函数式编程感兴趣的人可能会喜欢阅读它.
你可以查看这篇关于在C#中实现Y Combinator的漂亮文章:递归Lambda表达式,它可能会帮助你更好地理解这个想法.
正如内森所说,许多功能技术与Y组合器有关并且很有用,所以请坚持下去!Y真的很有用,因为它可以让你更好地理解你的代码,但我不认为这对描述它的帮助有特别的帮助.
您可以将组合器视为运行您的函数的虚拟机,您可以将其描述为非递归函数(= 高阶函数)。
有时,让这个组合器处于程序控制下会很好,可以做与面向方面编程(记忆、跟踪等)类似的事情,但我所知道的任何编程语言都不允许这样做。大多数时候它可能太麻烦和/或太难学习了。