23º GURU-SP - Entenda LISP em 15 minutos

693 views
636 views

Published on

Apresentação feita no 23º GURU-SP, em 18/05/2012 no auditório da Editora Abril

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
693
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

23º GURU-SP - Entenda LISP em 15 minutos

  1. 1. Entenda LISP em 15 minutos
  2. 2. 23º encontro do GURU-SP18/05/2012
  3. 3. EuPlínio Balduino - desenvolvedor e curiosoBalducas - @p_balduino
  4. 4. An elegant weapon http://xkcd.com/297/
  5. 5. Um pouco de históriaCriada em 1958 por John McCarthyImplementada pela primeira vez por Steve Russell, como LISP 1
  6. 6. Um pouco de históriaNem o próprio John McCarthy acreditou que era possível
  7. 7. DefiniçãoLISP 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. 8. DefiniçãoAtualmente LISP se refere a toda uma família de linguagens: AutoLISP Arc EmacsLISP Lucio Common Lisp Scheme Clojure Racket Chicken
  9. 9. E daí? A platéia já está bocejando.Linguagens "comuns" usam notação infixa
  10. 10. Essa tal notação prefixa#Rb uy1+2+3+4+5+61+( *3 +( *5 2 ) 4 )[,2 3 4 5 6.eue:) 1 , , , , ]rdc(+;LS IP( 123456 + )( 1( 23 ( 45) + * ) * );mi lgvl as eíe( 1 + ( 23 * ) ( 45) * )
  11. 11. Ainda estão bocejandoLISP trabalha diretamente na árvore sintática (notação prefixa)Não existe o conceito de precedência de operadores
  12. 12. Código e dados recebem o mesmotratamento;Coue ljr(ensm [ y df oa x ] ( xy) + )(enmda[ y df ei x ] ( ( xy 2) / + ) )(enclua [prdrvlr vlr] df aclr oeao ao1 ao2 (prdrvlr vlr) oeao ao1 ao2)(aclrsm 35 clua oa ) ;rslao 8 eutd:(aclrmda35 clua ei ) ;rslao 4 eutd:
  13. 13. / JvSrp / aacitfnto sm(,y { ucin oax ) rtr x+y eun ;}fnto mdax y { ucin ei(, ) rtr ( +y /2 eun x ) ;}fnto clua(prdr vlr,vlr) ucin aclroeao, ao1 ao2{ rtr oeao(ao1 vlr) eun prdrvlr, ao2;}clua(oa 3 5 aclrsm, , ) / rslao 8 / eutd:clua(ei,3 5 aclrmda , ) / rslao 4 / eutd:
  14. 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. 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. 16. MacrosSeu código é avaliado (compilado) em tempo de execuçãoNa prática, você interfere no compilador em tempo de execuçãoLet Over Lambda trata apenas disso. É um livrinho com menos de 400páginas
  17. 17. Macros permitem que você crie suaprópria DSLhttps://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. 18. E no final você vai aprender aDividir seu código em blocos pequenos e reutilizáveisReduzir as partes móveis e evitar estados globaisEntender melhor como funciona um compilador/interpretadorE de repente vai ter vontade de criar sua própria linguagem
  19. 19. Perguntas?(obrigado!)

×