Closure

https://kimh.github.io/clojure-by-example/#about-this-page

Closure

resolve alguns “problemas” em lisp

usa toda a infraestrutura de Java: maquina virtual e bibliotecas e provavelmente o compilador (para bytecode - JVM)

contem algumas coisas importantes do lisp, p. ex: macros

Problemas do Lisp

(funcao-ou-comando arg1 arg2 ...)

mas nem toda lista ( ... ) é uma expressão que deve ser avaliada.

o Closure substitui essas listas que nao devem ser avaliadas por [... ]

Parametros

(defun hello-world (nome sobrenome)
    (print (concatenate 'string "Hello" nome " " sobrenome))
    )
    

(nome sobrenome) nao é uma lista que vai ser avaliada, é uma que contem os parametros da função

Closure:

(defn hello-world [nome sobrenome]
    (println (str "Hello " nome " " sobrenome)
    )
    

Let

Lisp

(let ((x 10)
       (y 20))
       (+ x y))

Closure

(let [x 10 y 20]
    (+ x y))

Lista de dados

Lisp

(map inc '(1 2 3))

Closure

(map inc [1 2 3])

Lazy evaluation

sequencias (o super tipo de listas, vetores, etc são lazy

  (map inc [1 2 3 4 5 6 7])

retorna um thunk que devolve um elemento por vez

map, reduce, filter, etc

Paralelismo

tem o equivalente do go de goland

future

Atom

variavies que trocam de valor em closure sao chamadas de atomos e po site diz que sao thread safe (que é a grande coisa de RUST).

Problemas