Предположим, у меня есть ассоциативный список, подобный этому:
(setq x '((foo . ((bar . "llama")
(baz . "monkey")))))
И я хочу значение в bar
. Я могу сделать это:
(assoc-default 'bar (assoc-default 'foo x))
Но то, что я действительно хотел бы, это то, что принимает несколько ключей, как
(assoc-multi-key 'foo 'bar x)
Существует ли такая вещь, возможно, где-нибудь в пакете? Я уверен, что мог бы написать это, но я чувствую, что мое Google-фу просто терпит неудачу, и я не могу найти это.
setq
формы в примере сбивает с толку, поэтому я отредактировал его, чтобы использовать общую точечную нотацию для ассоциативных списков.
assoc-multi-key
остается не уточненным.
assoc-multi-key
том, чтобы найти первый ключ в ассоциативном списке. Это должно привести к новому списку ассоциаций, в котором мы ищем следующий ключ. И так далее. По сути, это сокращение для извлечения значений из вложенных ассоциативных списков.
let-alist
тоже? например (let-alist '((foo . ((bar . "llama") (baz . "monkey")))) .foo.bar)
вернется "llama"
. Я думаю, вы написали let-alist
после того, как вопрос был задан, но это в духе вопроса и очень стоит упомянуть ИМО!
assoc-multi-key
. Предположительно он ищет совпадения с обоими первыми двумя аргументами, но это действительно все, что можно предположить, исходя из того, что вы сказали. И он явно не может принять более двух ключей, поскольку аргумент alist (предположительноx
) является последним, а не первым, что говорит о том, что он не слишком полезен в целом. Попробуйте на самом деле указать, что вы ищете.