簡體   English   中英

交換Common Lisp列表中的元素

[英]Swapping elements in a Common Lisp list

是否有一個Common Lisp函數,它將在給定索引的列表中交換兩個元素並返回修改后的列表?

你可以使用rotatef

(rotatef (nth i lst) (nth j lst))

當然,列表索引可能很昂貴(花費O( 列表大小 )),所以如果你這樣做有規律性,你寧願使用數組:

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

我會避免使用nthcdr兩次索引到列表中,以獲取包含要交換的第一個元素的cons單元格的cdr,然后使用elt將剩余元素從子列表中取出。 這意味着您只需要從列表的頭部開始實際索引一次。

 (let ((list-tail (nthcdr i list)))
    (rotatef (car list-tail)
             (elt list-tail (- j i)))
    list)

至少從我的角度來看,這對於一個函數來說是足夠繁瑣的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM