假设我有一个名为"numbers"的列表(3 1 4 5 2).我正在寻找一个命令,它将列表从索引0反转到任意索引,即(反向数字2),它将新列表作为(4 1 3 5 2).
我试过谷歌搜索,但找不到合适的功能,我在这个阶段自己编写这个功能太多了.
谢谢.
基于libary函数的简单CL版本:
(defun reverse-first-n (list n)
(nreconc (subseq list 0 n) (nthcdr n list)))
Run Code Online (Sandbox Code Playgroud)
list到n第3个位置- 一次进入subseq,一次进入nthcdr,然后一次进入nreconc.这是最佳的版本:
(defun reverse-first-n (list n)
(if (or (= n 0) (= n 1))
list
(do* ((tail (list (pop list)))
(head tail (cons (pop list) head))
(count (1- n) (1- count)))
((zerop count)
(setf (cdr tail) list)
head))))
Run Code Online (Sandbox Code Playgroud)
请注意,这是代码中性能瓶颈的可能性很小.我提供第二个版本的主要目的是展示广泛且精心设计的CL库为您节省多少时间和精力.