Common Lisp中有一种简单的方法可以合并两个plist吗?或者从另一个角度来看:有没有办法从plist中删除重复项?我知道我可以添加plists(并且GETF将会找到它找到的第一个),但我不想在我的应用程序运行时继续累积未使用的密钥。
我正在考虑像(loop for p on my-plist by #'cddr ...)
之类的东西,但通常比我的第一个想法更简单!
答案 0 :(得分:5)
你可以从这个原始版本开始:
(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)