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

感谢你的帮助!

4

2 回答 2

2

我的最终目标是仅使用命令而不是临时变量来切换它们的值

它看起来像球拍支持set!-values,因此您可以在不使用任何显式临时变量的情况下交换变量,如下所示:

(define x 1)
(define y 2)
(set!-values (x y) (values y x))
;;; x is now 2 and y is 1

(甚至是链接文档中的示例)

于 2020-11-25T20:37:16.877 回答
1

在这个表达式中:

(set! x x)

两者都x引用同一个变量,即let绑定引入的变量。您对x内部所做的任何更改let(此处实际值未更改)在外部不可见let,因为在外部let符号x绑定另一个变量。

如果您重命名临时变量ab例如:

(let ((a y) (b x)) (set! x a) (set! y b))

您将观察到不同的行为。

于 2020-11-25T16:53:26.193 回答