【问题标题】:What (define (p) (p)) does?什么(定义(p)(p))?
【发布时间】:2019-11-17 03:58:29
【问题描述】:

我在看《计算机程序的结构与解释》第2版的练习1.5,我发现一个组合我不明白它到底是做什么的(define (p) (p))。

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

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

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

【问题讨论】:

  • 嗯,运行表达式 (p) 可以做什么?

标签: scheme lisp sicp


【解决方案1】:

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

【讨论】:

    【解决方案2】:
    (define (p) (p))
    (p)
    

    这是语法糖

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

    深入SICP后你会了解到这种无限递归也可以这样做:

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

    【讨论】:

      猜你喜欢
      • 2015-10-08
      • 1970-01-01
      • 2019-12-14
      • 1970-01-01
      • 2018-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-04
      相关资源
      最近更新 更多