【问题标题】:what is difference between (define (add x y) (+ x y)) and (define add (lambda (x y) (+ x y)))?(define (add x y) (+ x y)) 和 (define add (lambda (x y) (+ x y))) 有什么区别?
【发布时间】:2015-01-05 14:23:24
【问题描述】:

我现在正在使用 c++ 编写方案的解释器。我有一个关于 define 和 lambda 的问题。

(define (add x y) (+ x y))

扩展为

(define add (lambda (x y) (+ x y)))

lispy.py

这两种表达有什么区别?

为什么需要扩展表达式?仅仅因为表达式的求值容易?

【问题讨论】:

    标签: scheme lisp sicp


    【解决方案1】:

    它们是相同的,因为一个扩展到另一个。第一个表达式更容易写和读;将其扩展到第二个可以简化解释器(您应该欣赏这一点)。

    【讨论】:

    • 可能“一个扩展成另一个”,但这不是必需的。标准(至少是 R5RS)只是说它们是等效的。实现可以选择在不进行任何语法扩展的情况下识别两者。
    • @JoshuaTaylor:按照 OP 中的规定进行。
    • 是的,我现在注意到 OP 引用了一种特定的解释器,它是一种 Lisp 语言,不一定完全是 Scheme。该问题标有sicp,这表明了一个正确的方案(因此为什么I appealed 符合R5RS 标准),但看起来sicp 很可能是一个错误标签。
    【解决方案2】:

    它们在 R5RS 中是等价的:

    5.2 Definitions

    (define (<variable> <formals>) <body>)
    

    应该是零个或多个变量的序列,或者 一个或多个变量的序列,后跟一个空格分隔的句点 和另一个变量(如在 lambda 表达式中)。这个表格是 相当于

    (define <variable>
      (lambda (<formals>) <body>)).
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-07
      相关资源
      最近更新 更多