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
(mapcar #'with-tax *cart*)pasa la función nombrada que se define justo arriba.(mapcar (lambda (price) (round (* 100 price))) *cart*)usa en cambio una lambda en línea.(reduce #'+ *taxed* :initial-value 0)pliega la lista a un número y cubre el caso vacío.
Palabras clave y builtins usados aquí
defundefvarformatlambdamapcarreduceround
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.
Paso 1 de 3 en Orden superior; paso 13 de 27 en Fundamentos del lenguaje.