(define (p) (p)) 做什么?

What (define (p) (p)) does?

我正在阅读 "Structure and interpretation of computer programs" 练习 1.5 中的第 2 版,我发现了一个我不明白它到底做了什么的组合 (define (p) (p))

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

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

我不知道这个过程会发生什么,因为我自己定义了它。

p 是一个没有参数的过程。它的 body 是 (p)。在 Scheme 中,我们通过将过程及其参数括在方括号中来调用过程。鉴于 p 没有参数,(p) 只需调用 p。其中调用 p。其中调用 p... 等等。那么它有什么作用呢?无限循环!仅此而已。

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

这是语法糖

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

深入SICP你就会知道这个无限递归也可以这样做:

((lambda(s) (s s))
 (lambda(s) (display ".") (s s)))