5. Um pouco de história
Criada em 1958 por John McCarthy
Implementada pela primeira vez por Steve Russell, como LISP 1
6. Um pouco de história
Nem o próprio John McCarthy acreditou que era possível
7. Definição
LISP significa LISt Processing
A estrutura básica do LISP são listas ligadas, limitadas por
parênteses (S-Expression)
O código é composto de, basicamente, uma lista de listas
Agora você entende o porquê daquele monte de parenteses
(prdrvlrvlrvlr..vlr
oeao ao ao ao . ao)
(prdrvlr
oeao ao
(prdrvlrvlr..vlr)
oeao ao ao . ao)
8. Definição
Atualmente LISP se refere a toda uma família de linguagens:
AutoLISP
Arc
EmacsLISP
Lucio
Common Lisp
Scheme
Clojure
Racket
Chicken
9. E daí? A platéia já está bocejando.
Linguagens "comuns" usam notação infixa
14. Macros
;Coue
ljr
(enuls [odto flytuy
df nes cniin as re]
(fcniin
i odto
fly
as
tuy)
re)
(nesatoie
uls uhrzd
(hwaet"csongd"
so-lr Aes eao)
(rpdtbs)
do-aaae)
Não rolou. O que aconteceu?
15. Macros
;Coue
ljr
(emcouls [odto tuyfly
dfar nes cniin re as]
`i ~odto
(f cniin
~as
fly
~re)
tuy)
(nesatoie
uls uhrzd
(hwaet"csongd"
so-lr Aes eao)
(rpdtbs)
do-aaae)
(arepn
mcoxad
'uls fle"htu""hfle)
(nes as E re E as")
;(ffle"hfle "htu"
i as E as" E re)
Código é passado como parâmetro e avaliado condicionalmente
16. Macros
Seu código é avaliado (compilado) em tempo de execução
Na prática, você interfere no compilador em tempo de execução
Let Over Lambda trata apenas disso. É um livrinho com menos de 400
páginas
17. Macros permitem que você crie sua
própria DSL
https://github.com/pbalduino/north
(ecie"ot"
dsrb Nrh
(otx "sn cnet
cnet uig otx"
(t"hudts sml asrin"
i sol et ipe setos
(hud( 11 b-re
sol = ) etu)
(hud( 11 b-re
sol = ) etu)
(hud( 10 b-as)
sol = ) efle
(hud( 11 b-qas2
sol + ) eeul )
(hud( 11 b-o-qas1))
sol + ) enteul ))
18. E no final você vai aprender a
Dividir seu código em blocos pequenos e reutilizáveis
Reduzir as partes móveis e evitar estados globais
Entender melhor como funciona um compilador/interpretador
E de repente vai ter vontade de criar sua própria linguagem