我正在尝试在 Scheme 中运行这一行:
(let ((x y) (y x)) (set! x x) (set! y y))
在程序开始时,x 定义为 1,y 定义为 2。我希望输出为 x=2 和 y=1,但我得到 x=1 和 y=2
感谢你的帮助!
我正在尝试在 Scheme 中运行这一行:
(let ((x y) (y x)) (set! x x) (set! y y))
在程序开始时,x 定义为 1,y 定义为 2。我希望输出为 x=2 和 y=1,但我得到 x=1 和 y=2
感谢你的帮助!
我的最终目标是仅使用命令而不是临时变量来切换它们的值
它看起来像球拍支持set!-values,因此您可以在不使用任何显式临时变量的情况下交换变量,如下所示:
(define x 1)
(define y 2)
(set!-values (x y) (values y x))
;;; x is now 2 and y is 1
(甚至是链接文档中的示例)
在这个表达式中:
(set! x x)
两者都x引用同一个变量,即let绑定引入的变量。您对x内部所做的任何更改let(此处实际值未更改)在外部不可见let,因为在外部let符号x绑定到另一个变量。
如果您重命名临时变量a,b例如:
(let ((a y) (b x)) (set! x a) (set! y b))
您将观察到不同的行为。