【发布时间】:2009-02-09 22:10:38
【问题描述】:
如何在 LISP 中交换两个变量而不使用第三个变量?
【问题讨论】:
标签: lisp common-lisp
如何在 LISP 中交换两个变量而不使用第三个变量?
【问题讨论】:
标签: lisp common-lisp
(rotatef a b)
【讨论】:
还有:
(让 ((a b) (b)) ...)
【讨论】:
另一种选择,“并行 setf”:
(psetf a b b a)
【讨论】:
rotatef 和 psetf 之间的区别在于,如果 a 和 b 确实是更复杂的表单,那么 psetf 将评估任何子表单两次,但 rotatef 将评估它们只有一次,这是人们通常想要的。
另一种方法:
(setf (values a b) (values b a))
【讨论】:
相当可怕的方法,它只适用于数值,但它更通用,不依赖于语法:
a = a^b
b = a^b
a = a^b
假设 a 和 b 之前已赋值,^ 表示逻辑互斥替代。
【讨论】: