【发布时间】:2019-11-17 03:58:29
【问题描述】:
我在看《计算机程序的结构与解释》第2版的练习1.5,我发现一个组合我不明白它到底是做什么的(define (p) (p))。
当我调用程序(p) 时,光标在下一行闪烁,无法写入任何内容。
(define (p) (p))
(p)
我不知道这个过程会发生什么,因为我自己定义了它。
【问题讨论】:
-
嗯,运行表达式
(p)可以做什么?
我在看《计算机程序的结构与解释》第2版的练习1.5,我发现一个组合我不明白它到底是做什么的(define (p) (p))。
当我调用程序(p) 时,光标在下一行闪烁,无法写入任何内容。
(define (p) (p))
(p)
我不知道这个过程会发生什么,因为我自己定义了它。
【问题讨论】:
(p) 可以做什么?
p 是一个没有参数的过程。它的主体是(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)))
【讨论】: