typestar

Locales con let en Clojure

Convierte medidas de una poza de marea dentro de un let, y el nombre revinculado vuelve después.

;; let binds locals in order, so later ones can use earlier ones
(defn pool-report [depth-cm width-cm]
  (let [depth-m (/ depth-cm 100.0)
        width-m (/ width-cm 100.0)
        surface (* width-m width-m)
        volume (* surface depth-m)]
    (str "surface " surface " m2, volume " volume " m3")))

;; a rebinding shadows the outer one only inside its own body
(let [tide "low"]
  (println "outside:" tide)
  (let [tide "high"]
    (println "inside:" tide))
  (println "outside again:" tide))

(println (pool-report 18 60))

Cómo funciona

  1. pool-report abre un let donde depth-m y width-m escalan los argumentos en centímetros.
  2. surface y volume se vinculan más abajo y leen esos locales anteriores.
  3. Un let interior revincula tide mientras dura su cuerpo, y después vuelve el valor exterior.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
16
Caracteres a escribir
489
Tokens
84
Ritmo de tres estrellas
75 tpm

Al ritmo de tres estrellas de 75 tokens por minuto, este intento toma unos 67 segundos.

Escribe este fragmento

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

← Anterior Siguiente →