我无法将列表中的两项合并为一项。
例如:
'(Ben Hofferber) => '(Ben_Hofferber) or '(Ben-Hofferber)
关于如何实现这一点的任何想法?
我一直在搞乱打印功能,试图让它以这种方式工作但没有成功。我需要组合和分离这些项目,以便我可以将它们用作 a-list 的键。
您也可以将列表用作 alist 键。例如,
(assoc '(1 2) '(((1 1) a) ((1 2) b) ((1 3) c)) :test #'equal)
==> ((1 2) B)
所以,如果你有一份人员名单
(defparameter *people* '((Ben Hofferber) (Adam Young)))
你可以像这样设置他们的年龄:
(defparameter *ages* (mapcar #'list *people* '(20 11)))
并像这样找到它们:
(assoc '(Ben Hofferber) *ages* :test #'equal)
==> ((BEN HOFFERBER) 20)
但是,如果您坚持将符号组合为一个,则必须解释您想如何做到这一点。
如果两个符号在同一个包中,则组合符号也可以放置在那里:
(defun combine-symbols (s1 s2)
(intern (concatenate 'string (symbol-name s1) "-" (symbol-name s2))
(symbol-package s1)))
但是,如果它们位于不同的包中(例如,cl:car
和cl-user::ben
),您将不得不做出艰难的选择来使用哪个包。
或者,您可以使用字符串并使用
(defun combine-objects (o1 o2)
(format nil "~A-~A" o1 o2))
不要忘记通过:test #'equal
或:test #'string=
到assoc
。