construir una lista de asociación a partir de dos vectores

7

Tengo dos vectores [apple orange]y [5 10]. ¿Cómo construyo una lista de asociación a ((apple 5) (orange 10))partir de ellos?

yi.tang.uni
fuente

Respuestas:

11

Puedes usar cl-pairlis:

(require 'cl-lib)

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

También funciona para vectores:

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

(La clbiblioteca define el alias más corto pairlispara cl-pairlis, pero esto está en desuso en las versiones más nuevas de Emacs).

abo-abo
fuente
Hola abo-abo, ¡Funciona como magia! Me gustaría guardar la lista de asociación en un archivo, ¿conoces alguna buena función para esto? (insertar no funciona) ...
yi.tang.uni
(insert (prin1-to-string (pairlis [apple orange] [5 10])))
abo-abo
Interesante, no me di cuenta de que funciona en vectores (lo que parece ser una característica no documentada).
jch
@ abo-abo eso es genial, muchas gracias! ¡Me ahorró mucho tiempo buscando en Google!
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))

Emacs cl-mapcartoma como argumentos una función de arity una o más y el mismo número de secuencias que su arity. Common Lisp mapcares similar, pero las únicas secuencias que acepta son listas.

Dibujó
fuente