Suponha que eu tenha uma lista assoc como esta:
(setq x '((foo . ((bar . "llama")
(baz . "monkey")))))
E eu quero o valor em bar
. Eu posso fazer isso:
(assoc-default 'bar (assoc-default 'foo x))
Mas o que eu realmente gostaria é algo que aceite várias chaves, como
(assoc-multi-key 'foo 'bar x)
Existe algo assim, talvez em um pacote em algum lugar? Tenho certeza de que poderia escrever, mas sinto que meu Google-fu está falhando e não consigo encontrá-lo.
setq
formulário no exemplo confusa, por isso editei-a para usar a notação de ponto comum para assoc-lists.
assoc-multi-key
permanece não especificada.
assoc-multi-key
é procurar a primeira chave na lista assoc. Isso deve resolver para uma nova lista assoc na qual procuramos a próxima chave. E assim por diante. Basicamente, é uma abreviação para extrair valores de listas associadas aninhadas.
let-alist
também? por exemplo (let-alist '((foo . ((bar . "llama") (baz . "monkey")))) .foo.bar)
, retornará "llama"
. Eu acho que você escreveu let-alist
depois que a pergunta foi feita, mas está no espírito da pergunta e vale a pena mencionar a IMO!
assoc-multi-key
. Presumivelmente, ele procura correspondências para os dois primeiros argumentos, mas isso é tudo o que se poderia supor, pelo que você disse. E claramente não pode aceitar mais de duas chaves, uma vez que o argumento alista (presumivelmentex
) é o último, não o primeiro - o que sugere que não é muito útil em geral. Tente realmente especificar o que você está procurando.