使用Define的Scheme中的Y Combinator

Alc*_*ive 5 lisp scheme combinators lambda-calculus y-combinator

为了了解固定点组合器是什么和用于什么,我写了自己的.但不是用严格的匿名函数编写它,比如维基百科的例子,我只使用了define:

(define combine (lambda (functional)
                  (functional (lambda args (apply (combine functional) args))))
Run Code Online (Sandbox Code Playgroud)

我用factorial和fibonacci的函数来测试它,它似乎工作.这是否符合定点组合器的正式定义?

Alc*_*ive 5

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


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

(define Y
    (lambda (f)
      (f (lambda (x) ((Y f) x)))))
Run Code Online (Sandbox Code Playgroud)


che*_*web 3

答案是否定的,因为根据上一个答案中提到的博客,它甚至不符合组合器的定义,因为“组合”是一个自由变量。

  • 感谢您指出了这一点。为了确保博客的定义是正确的,您是否认为它等同于维基百科的定义:“组合器是一个高阶函数,仅使用函数应用程序和早期定义的组合器来定义其参数的结果。”?请参阅http://en.wikipedia.org/wiki/Combinatory_logic (2认同)