0

我有以下给定表达式的函数,执行它:

(define (foo exp0) exp0)

如果我执行以下操作:

(define x 5)
(foo (+ x 4))
(foo (* x 2))
display(x)

我想让 display(x) 显示 18。基本上,如何将给定表达式的值分配回给定变量?

4

2 回答 2

2

首先,该foo过程只是简单地返回参数,而不是“执行”它。回答您的问题,以下是在 Scheme 中重新分配值的方法:

(define x 5)
(set! x (+ x 4))
(set! x (* x 2))
(display x)

但说实话,这种编程风格(变异变量)在 Scheme 中是不受欢迎的。我相信这是更惯用的:

(let* ((x 5)
       (y (+ x 4))
       (z (* y 2)))
  (display z))
于 2013-10-10T01:41:28.127 回答
2

如果你能保证你更新的变量总是第一个操作数,你确实可以写这样一个宏:

(define-syntax foo
  (syntax-rules ()
    ((foo (op var arg ...))
     (set! var (op var arg ...)))))
于 2013-10-10T01:58:00.953 回答