Supponiamo di avere una lista di soci come questa:
(setq x '((foo . ((bar . "llama")
(baz . "monkey")))))
E voglio il valore a bar
. Posso farlo:
(assoc-default 'bar (assoc-default 'foo x))
Ma quello che mi piacerebbe davvero è qualcosa che accetta più chiavi, come
(assoc-multi-key 'foo 'bar x)
Esiste una cosa del genere, forse in un pacchetto da qualche parte? Sono sicuro di poterlo scrivere, ma sento che il mio Google-Fu sta fallendo e non riesco a trovarlo.
setq
confusa la formattazione originale del modulo nell'esempio, quindi l'ho modificata per usare la notazione comune per gli elenchi assoc.
assoc-multi-key
rimane non specificata.
assoc-multi-key
è cercare la prima chiave nell'elenco assoc. Questo dovrebbe risolversi in un nuovo elenco assoc in cui cerchiamo la chiave successiva. E così via. Fondamentalmente una scorciatoia per estrarre valori da elenchi assoc nidificati.
let-alist
anche menzionarlo ? ad es . (let-alist '((foo . ((bar . "llama") (baz . "monkey")))) .foo.bar)
tornerà "llama"
. Immagino tu abbia scritto let-alist
dopo che la domanda è stata posta, ma è nello spirito della domanda e vale la pena menzionare l'IMO!
assoc-multi-key
. Presumibilmente cerca corrispondenze con entrambi i suoi primi due argomenti, ma è davvero tutto ciò che si potrebbe supporre, da quello che hai detto. E chiaramente non può accettare più di due chiavi, poiché l'argomento di alist (presumibilmentex
) è l'ultimo, non il primo - il che suggerisce che non sia troppo utile in generale. Prova a specificare cosa stai cercando.