使用Define的Scheme中的Y Combinator

时间:2011-01-14 01:28:37

标签: lisp scheme lambda-calculus combinators y-combinator

为了了解固定点组合器的用途和用途,我写了自己的。但是我没有使用严格的匿名函数(如Wikipedia's example)编写它,而是使用了define:

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

我用factorial和fibonacci的函数对它进行了测试,它似乎有效。这是否符合定点组合器的正式定义?

2 个答案:

答案 0 :(得分:5)

编辑:当chessweb或其他任何人证实他的答案时,暂时认为他的答案是正确的,这个错误。


似乎答案是肯定的。显然,完全相同的组合子出现here,位于页面的中间位置:

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

答案 1 :(得分:3)

答案是否定的,因为根据the blog referred to in the previous answer,它甚至不符合组合器的定义,因为'combine'是一个自由变量。