Supongamos que tengo una lista asociada como esta:
(setq x '((foo . ((bar . "llama")
(baz . "monkey")))))
Y quiero el valor en bar
. Puedo hacer esto:
(assoc-default 'bar (assoc-default 'foo x))
Pero lo que realmente me gustaría es algo que acepte varias claves, como
(assoc-multi-key 'foo 'bar x)
¿Existe tal cosa, tal vez en un paquete en alguna parte? Estoy seguro de que podría escribirlo, pero siento que mi Google-fu está fallando y no puedo encontrarlo.
elisp
association-lists
abingham
fuente
fuente
assoc-multi-key
. Presumiblemente busca coincidencias con sus dos primeros argumentos, pero eso es realmente todo lo que uno podría suponer, por lo que ha dicho. Y claramente no puede aceptar más de dos claves, ya que el argumento alist (presumiblementex
) es el último, no el primero, lo que sugiere que no es demasiado útil en general. Intenta especificar lo que estás buscando.setq
formulario en el ejemplo confuso, así que lo edité para usar la notación de puntos común para las listas de asociaciones.assoc-multi-key
sigue sin especificarse.assoc-multi-key
es buscar la primera clave en la lista de asociación. Esto debería resolver una nueva lista de asociación en la que buscamos la siguiente clave. Etcétera. Básicamente, una abreviatura para extraer valores de listas de asociaciones anidadas.let-alist
también? Por ejemplo(let-alist '((foo . ((bar . "llama") (baz . "monkey")))) .foo.bar)
, volveremos"llama"
. ¡Supongo que escribistelet-alist
después de que se hizo la pregunta, pero está en el espíritu de la pregunta y vale la pena mencionar a IMO!Respuestas:
Aquí hay una opción que toma la sintaxis exacta que solicitó pero de forma generalizada, y es bastante simple de entender. La única diferencia es que el
ALIST
parámetro debe ser el primero (puede adaptarlo para el último, si eso es importante para usted).Entonces puedes llamarlo con:
fuente
Aquí hay una solución más genérica:
Puede tomar cualquier "camino" de claves. Esto volverá
(bar . "llama")
mientras que esto devolverá
(baz . "monkey")
:fuente
Aquí hay una función simple que funciona con una lista anidada dentro de otra lista:
fuente