我有以下给定表达式的函数,执行它:
(define (foo exp0) exp0)
如果我执行以下操作:
(define x 5)
(foo (+ x 4))
(foo (* x 2))
display(x)
我想让 display(x) 显示 18。基本上,如何将给定表达式的值分配回给定变量?
我有以下给定表达式的函数,执行它:
(define (foo exp0) exp0)
如果我执行以下操作:
(define x 5)
(foo (+ x 4))
(foo (* x 2))
display(x)
我想让 display(x) 显示 18。基本上,如何将给定表达式的值分配回给定变量?
首先,该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))
如果你能保证你更新的变量总是第一个操作数,你确实可以写这样一个宏:
(define-syntax foo
(syntax-rules ()
((foo (op var arg ...))
(set! var (op var arg ...)))))