typestar

mapcar y reduce en Lisp

Suma el impuesto a una lista de precios del carrito con mapcar y los totaliza con reduce.

;; MAPCAR applies a function to every element and collects the answers.
(defvar *cart* '(2.50 3.75 1.20 4.05))

(defun with-tax (price)
  "Return PRICE plus eight percent sales tax."
  (* price 1.08))

;; The function can be a named one or a lambda written in place.
(defvar *taxed* (mapcar #'with-tax *cart*))
(defvar *cents* (mapcar (lambda (price) (round (* 100 price))) *cart*))

;; REDUCE folds a list into a single value; :INITIAL-VALUE seeds the
;; fold, so an empty cart still adds up to zero.
(defvar *total* (reduce #'+ *taxed* :initial-value 0))

(format t "cents ~a~%" *cents*)
(format t "total ~,2f~%" *total*)

Cómo funciona

  1. (mapcar #'with-tax *cart*) pasa la función nombrada que se define justo arriba.
  2. (mapcar (lambda (price) (round (* 100 price))) *cart*) usa en cambio una lambda en línea.
  3. (reduce #'+ *taxed* :initial-value 0) pliega la lista a un número y cubre el caso vacío.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
17
Caracteres a escribir
619
Tokens
84
Ritmo de tres estrellas
70 tpm

Al ritmo de tres estrellas de 70 tokens por minuto, este intento toma unos 72 segundos.

Escribe este fragmento

Paso 1 de 3 en Orden superior; paso 13 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →