【问题标题】:LISP variable exchangeLISP 变量交换
【发布时间】:2009-02-09 22:10:38
【问题描述】:

如何在 LISP 中交换两个变量而不使用第三个变量?

【问题讨论】:

    标签: lisp common-lisp


    【解决方案1】:
    (rotatef a b)
    

    【讨论】:

      【解决方案2】:

      还有:

      (让 ((a b) (b)) ...)

      【讨论】:

      • 这不会改变变量的值,它只会创建新的词法绑定。
      • @dmitry-vk:这通常就是你所需要的。当然,这取决于你在做什么。
      【解决方案3】:

      另一种选择,“并行 setf”:

      (psetf a b b a)

      【讨论】:

      • rotatefpsetf 之间的区别在于,如果 ab 确实是更复杂的表单,那么 psetf 将评估任何子表单两次,但 rotatef 将评估它们只有一次,这是人们通常想要的。
      【解决方案4】:

      另一种方法:

      (setf (values a b) (values b a))
      

      【讨论】:

        【解决方案5】:

        相当可怕的方法,它只适用于数值,但它更通用,不依赖于语法:

        a = a^b

        b = a^b

        a = a^b

        假设 a 和 b 之前已赋值,^ 表示逻辑互斥替代。

        【讨论】:

        • 令人着迷的是,这两个二进制数真的可以相互传递,不需要额外的空间。
        猜你喜欢
        • 2021-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-07
        • 2015-01-19
        • 1970-01-01
        相关资源
        最近更新 更多