[英]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.