Supposons que j'ai une liste d'associations comme celle-ci:
(setq x '((foo . ((bar . "llama")
(baz . "monkey")))))
Et je veux la valeur à bar
. Je peux le faire:
(assoc-default 'bar (assoc-default 'foo x))
Mais ce que j'aimerais vraiment, c'est quelque chose qui accepte plusieurs clés, comme
(assoc-multi-key 'foo 'bar x)
Une telle chose existe-t-elle, peut-être dans un paquet quelque part? Je suis sûr que je pourrais l'écrire, mais j'ai l'impression que mon Google-fu échoue et que je ne le trouve pas.
setq
formulaire dans l'exemple confus, donc je l'ai édité pour utiliser la notation par points commune pour les listes d'associations.
assoc-multi-key
reste non spécifiée.
assoc-multi-key
est de rechercher la première clé de la liste d'associations. Cela devrait résoudre une nouvelle liste d'associations dans laquelle nous recherchons la clé suivante. Et ainsi de suite. Fondamentalement, un raccourci pour creuser des valeurs dans des listes d'associations imbriquées.
let-alist
aussi le mentionner ? par exemple (let-alist '((foo . ((bar . "llama") (baz . "monkey")))) .foo.bar)
reviendra "llama"
. Je suppose que vous avez écrit let-alist
après que la question a été posée, mais c'est dans l'esprit de la question et ça vaut vraiment la peine de mentionner IMO!
assoc-multi-key
. Vraisemblablement, il recherche des correspondances avec ses deux premiers arguments, mais c'est vraiment tout ce que l'on peut supposer, d'après ce que vous avez dit. Et il ne peut clairement pas accepter plus de deux clés, puisque l'argument alist (vraisemblablementx
) est le dernier, pas le premier - ce qui suggère qu'il n'est pas trop utile en général. Essayez de spécifier ce que vous recherchez.