Scheme x和x的集合在let in方案中不起作用
我试图在方案中运行此行:Scheme x和x的集合在let in方案中不起作用,scheme,racket,chez-scheme,Scheme,Racket,Chez 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外部,x符号绑定到另一个变量 如果重命名临时变量a和b,例如: (let ((a y) (b x)) (set! x
(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
外部,x
符号绑定到另一个变量
如果重命名临时变量a
和b
,例如:
(let ((a y) (b x)) (set! x a) (set! y b))
你将观察到一种不同的行为
我的最终目标是只使用命令切换它们的值,而不是使用临时变量
它看起来像racket支持,因此您可以在不使用任何显式临时变量的情况下交换变量,如下所示:
(define x 1)
(define y 2)
(set!-values (x y) (values y x))
;;; x is now 2 and y is 1
(这甚至是链接文档中的示例)是的,不幸的是,我无法为当前变量(x,y)指定新名称。我的最终目标是只使用命令切换它们的值,而不是使用临时变量。如何至少需要一个临时变量来交换值(引入一个中间lambda计数作为也有临时变量(参数))变量的值是否被限制为整数?如果是的话,有一个著名的技巧。@tfb我希望如此,但不是:(那么您至少需要一个临时变量(或者类似于
set!-values
,它隐式地使用它们)