Lisp 使用Define的方案中的Y组合子

Lisp 使用Define的方案中的Y组合子,lisp,scheme,lambda-calculus,combinators,y-combinator,Lisp,Scheme,Lambda Calculus,Combinators,Y Combinator,为了了解定点组合器是什么以及它的用途,我写了自己的。但我没有使用严格的匿名函数编写它,比如,我只是使用define: (define combine (lambda (functional) (functional (lambda args (apply (combine functional) args)))) 我已经用阶乘和斐波那契函数对此进行了测试,它似乎有效。这是否符合定点组合器的形式定义?< P>编辑:当CHESSWEB或其他任何人证实了他的答案时

为了了解定点组合器是什么以及它的用途,我写了自己的。但我没有使用严格的匿名函数编写它,比如,我只是使用define:

(define combine (lambda (functional)
                  (functional (lambda args (apply (combine functional) args))))

我已经用阶乘和斐波那契函数对此进行了测试,它似乎有效。这是否符合定点组合器的形式定义?

< P>编辑:当CHESSWEB或其他任何人证实了他的答案时,暂时认为他的答案是正确的,而这是错误的。
答案似乎是肯定的。显然,在页面中间出现了完全相同的组合符:

(define Y
    (lambda (f)
      (f (lambda (x) ((Y f) x)))))

答案是否定的,因为根据,它甚至不符合combinator的定义,因为“combine”是一个自由变量

你不应该。我们鼓励你回答自己的问题。IIRC你可以在给出答案后的2天内接受你自己的答案。教授Y组合器的要点是看你如何用函数实现递归。通过编写递归定义,您无法做到这一点——因此您最终得到了一些有效的东西,但它只在理解Y应该做什么时有用。Mike的文章将是深入阅读的好地方,可以了解
define
-less版本是如何派生的。练习2:Y combinator不使用
define
letrec
:)感谢您指出这一点。为了确保博客的定义是正确的,你是否认为它等同于维基百科的定义:“组合器是一个高阶函数,只使用函数应用程序和较早定义的组合器来定义其参数的结果。”看见