我在练习1.5中正在阅读《计算机程序的结构和解释》第二版,发现一个组合,我不理解它的确切作用(define (p) (p))
。
当我调用过程(p)
时,我的光标在下一行中闪烁,而无法编写任何内容。
(define (p) (p))
(p)
我不知道对这个过程有什么期望,因为我自己定义了它。
答案 0 :(得分:5)
menu-item-has-children
是一个没有参数的过程。它的主体是p
。在Scheme中,我们通过将过程及其参数括在方括号中来调用过程。鉴于(p)
没有参数,p
只需调用(p)
。哪个调用p
。哪个调用p
...依此类推。那怎么办呢?无限循环!就是这样。
答案 1 :(得分:2)
(define (p) (p))
(p)
这是语法糖
(define p (lamnda () (p))
(p)
加深SICP之后,您将了解到,这种无限递归也可以做到:
((lambda(s) (s s))
(lambda(s) (display ".") (s s)))