如何在lisp中进行值赋值问题

lka*_*htz 3 lisp common-lisp

我正在学习常见的lisp,并尝试实现交换值函数来交换两个变量的值.为什么以下不起作用?

(defun swap-value (a b)
           (setf tmp 0)
             (progn
              ((setf tmp a)
               (setf a b)
               (setf b tmp))))
Run Code Online (Sandbox Code Playgroud)

错误信息:

in: LAMBDA NIL
;     ((SETF TMP A) (SETF A B) (SETF B TMP))
; 
; caught ERROR:
;   illegal function call

;     (SB-INT:NAMED-LAMBDA SWAP-VALUE
;         (A B)
Run Code Online (Sandbox Code Playgroud)

Ter*_*aug 13

您可以使用ROTATEF宏来交换两个位置的值.更一般地说,ROTATEF将所有位置的内容旋转到左侧.最左边的地方的内容放在最右边的地方.因此它可以用于两个以上的地方.