(定义(p)(p))是什么?

时间:2019-07-07 10:26:48

标签: scheme lisp sicp

我在练习1.5中正在阅读《计算机程序的结构和解释》第二版,发现一个组合,我不理解它的确切作用(define (p) (p))

当我调用过程(p)时,我的光标在下一行中闪烁,而无法编写任何内容。

(define (p) (p))
(p)

我不知道对这个过程有什么期望,因为我自己定义了它。

2 个答案:

答案 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)))