Ma

Mapeo en Common Lisp

12 ejercicios

Acerca de Mapeo

El mapeo consiste en aplicar una función a cada elemento de una secuencia para producir una nueva secuencia.

mapcar puede usarse para mapear una función sobre una lista de objetos:

(mapcar #'double '(1 2 3 4)) ; => (2 4 6 8)

Fíjate en que el primer argumento es una función a la que llamar. El #' es una sintaxis de citación especial para especificar una función. (Se puede usar 'double aquí, pero el uso de #' es idiomático y, podría decirse, «más correcto».)

Más de una lista

El mapeo no se limita a aplicar una función a una única secuencia; también puede hacerse con varias secuencias. Si se proporcionan N secuencias, la función debe aceptar N argumentos.

(mapcar #'list '(1 2) '(a b) '("foo" "bar")) ; => ((1 a "foo") (2 b "bar"))

Otras funciones de mapeo

Además de mapcar, hay otras funciones para mapear sobre listas. mapcar es sin duda la más común, pero conviene conocer las demás.

maplist funciona de forma similar a mapcar, pero opera sobre sublistas sucesivas en lugar de sobre elementos. Primero sobre la lista entera, luego sobre cdr, después sobre el cdr de eso, etc.:

(maplist #'identity '(a b c)) ; => ((A B C) (B C) (C))

mapc y mapl son como mapcar y maplist, respectivamente, pero no recopilan los resultados; en su lugar, devuelven la primera lista. Esto se usa para operaciones con efectos secundarios.

mapcan y mapcon son como mapcar y maplist, pero el resultado se aplana mediante el uso de nconc, que es como append pero destructivo con todos sus argumentos menos el último.

Mapeo sobre otras secuencias

El mapeo no se limita a las listas. Se puede mapear sobre cualquier secuencia (tratada en otro concepto). En el caso de secuencias que no son listas, se usa la función map.

map acepta 3 argumentos o más:

  • el primero es el tipo de la secuencia resultante
  • el segundo es la función que se va a aplicar
  • el tercero y los restantes son las secuencias sobre las que operar.
(map 'list #'double '(1 2 3))        ; => (2 4 6)
(map 'string #'char-upcase "foobar") ; => "FOOBAR"

Como caso especial, si se proporciona nil como tipo de la secuencia resultante, se devuelve nil. Esto (igual que mapc y mapl más arriba) se usa para efectos secundarios.

Editar en GitHub El enlace se abre en una nueva ventana o pestaña

Aprende Mapeo

La práctica está bloqueada

Desbloquea 8 ejercicios más para practicar Mapeo