Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

23º GURU-SP - Entenda LISP em 15 minutos

806 views

Published on

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

Published in: Technology
  • Be the first to comment

  • Be the first to like this

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!)

×