İki tane ayrılmamış listelerim var ve sıralanan ve tüm öğelerin benzersiz olduğu başka bir liste üretmem gerekiyor.İki listeye katılmalı, bunları sıralamalı ve çoğaltmaları kaldırmalıyım. Bunu yapmanın daha iyi bir yolu var mı?
Öğeler her iki listede de birden çok kez oluşabilir ve bunlar orijinal olarak sıralanmamıştır.
Benim işlevi şöyle görünür:
(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))))
aynı başarmak için daha iyi bir yolu var mı?
Numune çağrı:
[CL]> (merge-lists '(9 8 4 8 9 7 2) '(1 7 3 9 2 6) #'>)
==> (9 8 7 6 4 3 2 1)
"Daha iyi" ile ne demek istediğini açıklığa kavuşturmak isteyebilirsiniz. – mweerden
Test edilmemiş snippet'i denediniz mi ve işe yaradı mı? Cevabımı düzenlemeyi çok isterim ki, bizden sonraki nesiller Lisk 3000'in çökmesine sebep olan snippet korkusuyla yaşamak zorunda kalmazlar ... –
Gerçekten test ettim ve gerçekten işe yaradı. Cevap için çok teşekkürler. – dsm