因此,我花了很多时间阅读并重新阅读The Little Schemer中第9章的结尾,其中应用Y组合器是为该length功能开发的.我认为我的困惑归结为一个单独的声明,对比两个版本的长度(在组合器被分解之前):
A:
((lambda (mk-length)
(mk-length mk-length))
(lambda (mk-length)
(lambda (l)
(cond
((null? l) 0 )
(else (add1
((mk-length mk-length)
(cdr l))))))))
B:
((lambda (mk-length)
(mk-length mk-length))
(lambda (mk-length)
((lambda (length)
(lambda (l)
(cond
((null? l) 0)
(else (add1 (length (cdr l)))))))
(mk-length mk-length))))
Run Code Online (Sandbox Code Playgroud)
第170页(第4版)指出A.
当我们将它应用于参数时返回一个函数
而B
不返回功能
从而产生自我应用的无限回归.我很难过.如果B受到这个问题的困扰,我不知道A如何避免它.
我正在阅读The Little Schemer并对以下代码感到困惑:
((lambda (len)
(lambda (l)
(cond
((null? l) 0)
(else
(+ 1 (len (cdr l)))))))
eternity)
(define eternity
(lambda (x)
(eternity x)))
Run Code Online (Sandbox Code Playgroud)
代码是确定空列表,否则它永远不会停止.
为什么" len"没有递归?