【发布时间】:2014-12-07 17:03:25
【问题描述】:
考虑以下方案定义:
(define f (lambda () (procedure? f)))
奇怪的是,当我评估(f) 时,我得到#t。问题是:为什么这个评估会终止?我期待它无限循环。鉴于 f 尚未定义,内部 lambda 的计算结果是什么?
【问题讨论】:
标签: recursion scheme infinite-loop
考虑以下方案定义:
(define f (lambda () (procedure? f)))
奇怪的是,当我评估(f) 时,我得到#t。问题是:为什么这个评估会终止?我期待它无限循环。鉴于 f 尚未定义,内部 lambda 的计算结果是什么?
【问题讨论】:
标签: recursion scheme infinite-loop
这里不涉及递归。
当您执行此代码时,会定义一个过程f(未执行):
> (define f (lambda () (procedure? f)))
> f
#<procedure:f>
当你执行它时,它会检查是否有一个与符号 f 相关联的过程,在那个时间点是真的,所以它返回 #t:
> (f)
#t
要递归,该过程必须使用(f) 调用自身。
【讨论】: