Простой способ объединить списки? - PullRequest
7 голосов
/ 03 августа 2010

Есть ли в Common Lisp простой способ объединить два списка?Или с другой точки зрения: есть ли способ удалить дубликаты из списка?Я знаю, что могу просто добавлять списки (и GETF возьмет первый найденный файл), но я бы не хотел накапливать неиспользуемые ключи при запуске моего приложения.*, но часто есть более простой способ, чем моя первая мысль!

1 Ответ

5 голосов
/ 04 августа 2010

Вы можете начать с этой примитивной версии:

(defun merge-plist (p1 p2)
  (loop with notfound = '#:notfound
        for (indicator value) on p1 by #'cddr
        when (eq (getf p2 indicator notfound) notfound) 
        do (progn
             (push value p2)
             (push indicator p2)))
  p2)

CL-USER 104 > (merge-plist '(a 1 b 2 c 3) '(a 2 b 4))
(C 3 A 2 B 4)
...