let y let* en Lisp
let vincula todos sus nombres a la vez; let* construye cada uno sobre el anterior.
;; let binds in parallel; let* lets each binding see the ones above it
(defun cart-total (subtotal)
(let* ((tax-rate 0.08)
(tax (* subtotal tax-rate))
(shipping (if (> subtotal 50) 0 5.95)))
(+ subtotal tax shipping)))
(defparameter *basket* 40)
;; the inner binding shadows the outer one for the length of its body
(let ((discount 0.10))
(format t "everyone gets ~a~%" discount)
(let ((discount 0.25))
(format t "members get ~a~%" discount))
(format t "and back to ~a~%" discount))
(format t "cart comes to ~$~%" (cart-total *basket*))
Cómo funciona
- Dentro de
cart-total,let*deja quetaxuse eltax-ratevinculado justo arriba. - La vinculación
shippingperdona el cargo de 5.95 en cuantosubtotalsupera 50. - Un
letanidado revinculadiscounta 0.25, y el 0.10 exterior vuelve apenas termina ese cuerpo.
Palabras clave y builtins usados aquí
defparameterdefunformatiflet
El intento, en números
- Líneas
- 17
- Caracteres a escribir
- 539
- Tokens
- 95
- Ritmo de tres estrellas
- 75 tpm
Al ritmo de tres estrellas de 75 tokens por minuto, este intento toma unos 76 segundos.
Paso 2 de 3 en Valores y vinculaciones; paso 2 de 27 en Fundamentos del lenguaje.