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
pool-reportabre unletdondedepth-mywidth-mescalan los argumentos en centímetros.surfaceyvolumese vinculan más abajo y leen esos locales anteriores.- Un
letinterior revinculatidemientras dura su cuerpo, y después vuelve el valor exterior.
Palabras clave y builtins usados aquí
defnletprintlnstr
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.
Paso 2 de 3 en Valores y vinculaciones; paso 2 de 27 en Fundamentos del lenguaje.