如何制作一个更改了列表的 2 个位置的新列表?
How to make a new list with 2 positions of a list changed?
我是 LISP(准确地说是 Common lisp)的新手,我需要创建一个函数,我可以在其中传递列表和 2 个参数,pos1 pos2,它们是列表中的元素位置,函数然后应该 return 一个新列表,其中包含交换位置的元素。
例子
(changepos '(a b c d) 0 3) -> (D B C A)
你是对的 - rotatef
modifies the given list. But you can use copy-list
or copy-tree
(对于嵌套列表)在你的函数中并修改该副本:
(defun changepos (list i j)
(let ((new-list (copy-tree list)))
(rotatef (nth i new-list)
(nth j new-list))
new-list))
测试:
> (defparameter *aa* (list 1 2 3 4 5))
*AA*
> (changepos *aa* 1 3)
(1 4 3 2 5)
> *aa*
(1 2 3 4 5)
我是 LISP(准确地说是 Common lisp)的新手,我需要创建一个函数,我可以在其中传递列表和 2 个参数,pos1 pos2,它们是列表中的元素位置,函数然后应该 return 一个新列表,其中包含交换位置的元素。
例子 (changepos '(a b c d) 0 3) -> (D B C A)
你是对的 - rotatef
modifies the given list. But you can use copy-list
or copy-tree
(对于嵌套列表)在你的函数中并修改该副本:
(defun changepos (list i j)
(let ((new-list (copy-tree list)))
(rotatef (nth i new-list)
(nth j new-list))
new-list))
测试:
> (defparameter *aa* (list 1 2 3 4 5))
*AA*
> (changepos *aa* 1 3)
(1 4 3 2 5)
> *aa*
(1 2 3 4 5)