Vous pouvez également utiliser des listes comme clés alist. Par exemple,
(assoc '(1 2) '(((1 1) a) ((1 2) b) ((1 3) c)) :test #'equal)
==> ((1 2) B)
Donc, si vous avez une liste de personnes
(defparameter *people* '((Ben Hofferber) (Adam Young)))
vous pouvez définir leur âge comme ceci:
(defparameter *ages* (mapcar #'list *people* '(20 11)))
et les trouver comme ceci:
(assoc '(Ben Hofferber) *ages* :test #'equal)
==> ((BEN HOFFERBER) 20)
Si, cependant, vous insi En combinant des symboles en un, vous devrez expliquer comment vous voulez faire cela.
Si les deux symboles sont dans le même paquet, les symboles combinés peuvent être placés là aussi:
(defun combine-symbols (s1 s2)
(intern (concatenate 'string (symbol-name s1) "-" (symbol-name s2))
(symbol-package s1)))
mais si elles sont dans des emballages différents (par exemple, cl:car
et cl-user::ben
), vous auriez à faire choix difficile quel paquet aller avec.
Vous pouvez aller avec des cordes et utiliser
(defun combine-objects (o1 o2)
(format nil "~A-~A" o1 o2))
Ne pas oublier de passer :test #'equal
ou :test #'string=
à assoc
.
Vous devez spécifier ce que les éléments de la liste pourraient être et ce que vous entendez par "combiner". Par exemple, comment voulez-vous combiner deux symboles de différents paquets? – sds
Fondamentalement, je veux combiner des données à partir de deux éléments dans une liste à un élément. donc de '(Ben Hofferber) à' (Ben_Hofferber) où cdr reviendra à zéro au lieu de Hofferber. – Hoffination
Vous n'avez pas répondu à ma question: comment voulez-vous combiner le symbole cl: voiture avec le symbole cl-user :: Ben? – sds