LISP变量交换
如何在不使用第三个变量的情况下在LISP中交换两个变量?另外:LISP变量交换,lisp,common-lisp,Lisp,Common Lisp,如何在不使用第三个变量的情况下在LISP中交换两个变量?另外: (rotatef a b) (让((a)b) (b)(a) …)另一种选择,“并行setf”: (psetf a b a)相当可怕的方法,它只适用于数值,但它更通用,不依赖于语法: a=a^b b=a^b a=a^b 假设之前分配了a和b,^表示逻辑排他选项。另一种方法: (setf (values a b) (values b a)) 这不会更改变量的值,只会创建新的词法绑定。@dmitry vk:这通常就是您所需要的。当然,
(rotatef a b)
(让((a)b)
(b)(a)
…)另一种选择,“并行setf”:
(psetf a b a)相当可怕的方法,它只适用于数值,但它更通用,不依赖于语法: a=a^b b=a^b a=a^b 假设之前分配了a和b,^表示逻辑排他选项。另一种方法:
(setf (values a b) (values b a))
这不会更改变量的值,只会创建新的词法绑定。@dmitry vk:这通常就是您所需要的。当然,这取决于你在做什么。
rotatef
和psetf
之间的区别在于,如果A
和b
确实是更复杂的表单,那么psetf
将对任何子表单求值两次,但rotatef
只对它们求值一次,这是人们通常想要的。