【发布时间】:2015-01-05 14:23:24
【问题描述】:
我现在正在使用 c++ 编写方案的解释器。我有一个关于 define 和 lambda 的问题。
(define (add x y) (+ x y))
扩展为
(define add (lambda (x y) (+ x y)))
这两种表达有什么区别?
为什么需要扩展表达式?仅仅因为表达式的求值容易?
【问题讨论】:
我现在正在使用 c++ 编写方案的解释器。我有一个关于 define 和 lambda 的问题。
(define (add x y) (+ x y))
扩展为
(define add (lambda (x y) (+ x y)))
这两种表达有什么区别?
为什么需要扩展表达式?仅仅因为表达式的求值容易?
【问题讨论】:
它们是相同的,因为一个扩展到另一个。第一个表达式更容易写和读;将其扩展到第二个可以简化解释器(您应该欣赏这一点)。
【讨论】:
它们在 R5RS 中是等价的:
5.2 Definitions
(define (<variable> <formals>) <body>)
应该是零个或多个变量的序列,或者 一个或多个变量的序列,后跟一个空格分隔的句点 和另一个变量(如在 lambda 表达式中)。这个表格是 相当于 (define <variable> (lambda (<formals>) <body>)).
【讨论】: