(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)))
我正在阅读 "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)))