typestar

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

  1. Dentro de cart-total, let* deja que tax use el tax-rate vinculado justo arriba.
  2. La vinculación shipping perdona el cargo de 5.95 en cuanto subtotal supera 50.
  3. Un let anidado revincula discount a 0.25, y el 0.10 exterior vuelve apenas termina ese cuerpo.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 2 de 3 en Valores y vinculaciones; paso 2 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →