dsm*_*dsm 6 lisp sorting algorithm list
我有两个未排序的列表,我需要生成另一个已排序的列表,其中所有元素都是唯一的.
元素可以在两个列表中多次出现,并且它们最初是未排序的.
我的功能看起来像这样:
(defun merge-lists (list-a list-b sort-fn)
"Merges two lists of (x, y) coordinates sorting them and removing dupes"
(let ((prev nil))
(remove-if
(lambda (point)
(let ((ret-val (equal point prev)))
(setf prev point)
ret-val))
(sort
(merge 'list list-a list-b sort-fn) ;'
sort-fn))))
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来实现同样的目标?
示例电话:
[CL]> (merge-lists '(9 8 4 8 9 7 2) '(1 7 3 9 2 6) #'>)
==> (9 8 7 6 4 3 2 1)
Run Code Online (Sandbox Code Playgroud)
Ant*_*nen 11
我们邻居友好的Lisp大师指出了删除重复功能.
他还提供了以下代码段:
(defun merge-lists (list-a list-b sort-fn test-fn)
(sort (remove-duplicates (append list-a list-b) :test test-fn) sort-fn))
Run Code Online (Sandbox Code Playgroud)