elisp – ¿Cómo puedo mapear un vector y obtener un vector?

Pregunta:

Lo único que he encontrado que funciona es

(eval `(vector ,@(mapcar #'1+ [1 2 3 4])))
=> [2 3 4 5]

pero que parece demasiado complicado para ser la forma 'correcta'.

Respuesta:

Utilice cl-map , en su lugar:

(cl-map 'vector #'1+ [1 2 3 4])

Un poco más de antecedentes: cl-map es la función de map Common Lisp que se generaliza a tipos de secuencia:

(cl-map 'vector #'1+ '[1 2 3 4]) ;; ==> [2 3 4 5]
(cl-map 'list   #'1+ '(1 2 3 4)) ;; ==> (2 3 4 5)
(cl-map 'string #'upcase "abc")  ;; ==> "ABC"

También puede convertir entre tipos de secuencia (por ejemplo, aquí, la entrada es una lista y la salida es un vector):

(cl-map 'vector #'1+ '(1 2 3 4)) ;; ==> [2 3 4 5]

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım