construir uma lista de associação a partir de dois vetores

7

Eu tenho dois vetores [apple orange]e [5 10]. Como faço para construir uma lista de associações a ((apple 5) (orange 10))partir deles?

yi.tang.uni
fonte

Respostas:

11

Você pode usar cl-pairlis:

(require 'cl-lib)

(cl-pairlis '(apple orange) '(5 10))
;; =>
;; ((apple . 5) (orange . 10))

Também funciona para vetores:

(cl-pairlis [apple orange] [5 10])
;; =>
;; ((apple . 5) (orange . 10))

(A clbiblioteca define o alias mais curto pairlispara cl-pairlis, mas isso é preterido nas versões mais recentes do Emacs.)

abo-abo
fonte
Oi abo-abo, Funciona como mágica! Eu gostaria de salvar a lista de associações em um arquivo. Você conhece alguma boa função para isso? (inserção não funciona) ...
yi.tang.uni
(insert (prin1-to-string (pairlis [maçã laranja] [5 10]))))
abo-abo
Interessante, eu não sabia que ele funciona em vetores (o que parece ser um recurso não documentado).
jch 15/05
@ abo-abo isso é ótimo, muito obrigado! poupou-me muito tempo pesquisando!
Yi.tang.uni
11

(cl-mapcar #'cons [apple orange] [5 10]) => ((apple . 5) (orange . 10))

(cl-mapcar #'list [apple orange] [5 10]) => ((apple 5) (orange 10))

O de Emacs cl-mapcartoma como argumentos uma função da aridade, uma ou mais e o mesmo número de seqüências que sua aridade. O Lisp comum mapcaré semelhante, mas as únicas sequências que ele aceita são listas.

Desenhou
fonte