List 交换公共Lisp列表中的元素

List 交换公共Lisp列表中的元素,list,lisp,common-lisp,swap,List,Lisp,Common Lisp,Swap,是否有一个通用的Lisp函数可以交换列表中给定索引的两个元素并返回修改后的列表?您可以使用: 当然,列表索引可能会很昂贵(成本为O(列表大小)),因此,如果您按照任何规则执行此操作,您更希望使用数组: (rotatef (aref arr i) (aref arr j)) 通过使用nthcdr获取包含要交换的第一个元素的cons单元格的cdr,然后使用elt从子列表中获取剩余元素,可以避免两次索引到列表中。这意味着您实际上只需要从列表的开头开始索引一次 (let((列表尾部(nthcdr i列

是否有一个通用的Lisp函数可以交换列表中给定索引的两个元素并返回修改后的列表?

您可以使用:

当然,列表索引可能会很昂贵(成本为O(列表大小)),因此,如果您按照任何规则执行此操作,您更希望使用数组:

(rotatef (aref arr i) (aref arr j))

通过使用
nthcdr
获取包含要交换的第一个元素的cons单元格的cdr,然后使用
elt
从子列表中获取剩余元素,可以避免两次索引到列表中。这意味着您实际上只需要从列表的开头开始索引一次

(let((列表尾部(nthcdr i列表)))
(rotatef(车辆列表尾部)
(英语教学列表尾部(-j i)))
(列表)

至少在我看来,这足以证明函数的合理性。

该死!因此需要对语法突出显示做些什么。我认为这对python不利。
(rotatef (aref arr i) (aref arr j))