87得票17回答
在Python中,一个Lambda函数能否递归调用自身?

一个常规函数在其定义中可以包含对自身的调用,这没有问题。但是我无法想象如何使用lambda函数实现这一点,因为lambda函数没有名称可以引用回来。有没有办法做到这一点?怎么做呢?

57得票8回答
“组合子”(非数学家的好解释)的良好解释

有谁能给出“组合子”(如 Y-组合子等,而不是指该公司)的良好解释吗? 我正在寻找一位为实用程序员提供解释的人,他们了解递归和高阶函数,但并没有很强的理论或数学背景。 (注:我在谈论这些东西)

53得票5回答
Y Combinator在Haskell中的应用

是否可能在Haskell中编写Y Combinator? 这似乎会产生无限递归类型。 Y :: f -> b -> c where f :: (f -> b -> c) 或者其他什么。即使是一个简单的稍微分解的阶乘。 factMaker _ 0 = 1 f...

49得票5回答
如何在不使用“let rec”的情况下定义Y组合子?

在几乎所有的例子中,ML类型语言中的Y组合子被写成这样:let rec y f x = f (y f) x let factorial = y (fun f -> function 0 -> 1 | n -> n * f(n - 1)) 这个代码可以正常运行,但是使用 let...

40得票5回答
Y-Combinator实际应用举例

最近我在阅读一些有关函数式编程的内容,尝试理解Y组合子。我了解到,您可以使用Y组合子在不直接支持递归的语言中有效地实现递归。然而,我可能会使用的每种语言都已经支持递归,所以我不确定使用Y组合器会有多大用处。 是否有更好的Y组合器实际应用例子? 有没有人真正在实际生产代码中使用过Y组合器?还是...

38得票2回答
在《The Little Schemer》中讨论的Y组合子问题

所以,我花了很多时间阅读和重读The Little Schemer第9章的结尾部分,其中应用Y组合器来开发length函数。我认为我的困惑归结为一个对比两个版本length函数的陈述(在组合器被分解之前):A: ((lambda (mk-length) (mk-length mk...

24得票1回答
在C#中使用Y组合子

我正在尝试弄清如何在一行中编写递归函数(例如阶乘,尽管我的函数要复杂得多)。为了做到这一点,我想使用Lambda演算的Y组合子。以下是第一个定义:Y = λf.(λx.f(x x))(λx.f(x x)) 这里是简化后的定义:Y g = g(Y g) 我试着用C#写成了这样:// Origin...

20得票4回答
为什么这个函数的类型是 (a -> a) -> a?

为什么这个函数的类型是 (a -> a) -> a? Prelude> let y f = f (y f) Prelude> :t y y :: (t -> t) -> t 它不应该是一个无限/递归类型吗? 我本来想试着表达一下我认为它的类型应该是什么,但出于某些...

19得票7回答
递归函数的高阶函数?

有没有一种通过高阶函数“包装”递归函数的方法,使得递归调用也被包装?(例如在每次调用时记录函数参数。) 例如,假设我们有一个叫做sum()的函数,它通过将头部与尾部的和相加来返回数字列表的总和: function sum(a) { if (a.length === 0) { ...

17得票2回答
我不理解Y-Combinator,于是我尝试着实现它,最终得到了一个更短的方法,而且它也可行。这是怎么可能的?

我无法理解Y组合器,因此尝试编写一个函数,使其无需本地实现即可实现递归。经过一些思考后,我得到了以下代码:Y = λx.(λv.(x x) v) 比实际长度短:Y = λf.(λx.f (x x)) (λx.f (x x)) 然后,令我惊讶的是,它起作用了。以下是一些示例:// JavaScr...