我需要加入两个列表,对它们进行排序并删除重复项.有一个更好的方法吗?

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)