x 和 x 的集合在 let in Scheme 中不起作用
set of x and x does not work in let in Scheme
我正在尝试 运行 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! x x)
两个 x
引用相同的变量,一个由 let
绑定引入。您在 let
中对 x
所做的任何更改(此处,实际值未更改)在 let
之外是不可见的,因为在 let
之外 [=12] =] 符号 绑定 到另一个变量。
如果重命名临时变量 a
和 b
例如:
(let ((a y) (b x)) (set! x a) (set! y b))
您会观察到不同的行为。
My end goal is to switch their values only with commands, not with temporary variables
看起来 racket 支持 set!-values
,因此您可以交换变量而无需使用任何显式临时变量,如下所示:
(define x 1)
(define y 2)
(set!-values (x y) (values y x))
;;; x is now 2 and y is 1
(甚至是链接文档中的示例)
我正在尝试 运行 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! x x)
两个 x
引用相同的变量,一个由 let
绑定引入。您在 let
中对 x
所做的任何更改(此处,实际值未更改)在 let
之外是不可见的,因为在 let
之外 [=12] =] 符号 绑定 到另一个变量。
如果重命名临时变量 a
和 b
例如:
(let ((a y) (b x)) (set! x a) (set! y b))
您会观察到不同的行为。
My end goal is to switch their values only with commands, not with temporary variables
看起来 racket 支持 set!-values
,因此您可以交换变量而无需使用任何显式临时变量,如下所示:
(define x 1)
(define y 2)
(set!-values (x y) (values y x))
;;; x is now 2 and y is 1
(甚至是链接文档中的示例)