[英]Strange recursive definition in Scheme
考虑以下方案定义:
(define f (lambda () (procedure? f)))
奇怪的是,当我评估(f)
我得到#t
。 问题是:为什么该评估会终止? 我期望它无限循环。 鉴于f
尚未定义,内部lambda
求值什么?
这里没有递归。
当您执行此代码时,将定义过程f
(未执行):
> (define f (lambda () (procedure? f)))
> f
#<procedure:f>
然后,当您执行它时,它将检查是否存在与符号f相关联的过程,该过程在当时是正确的,因此返回#t
:
> (f)
#t
为了递归,该过程必须使用(f)
进行调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.