SlideShare ist ein Scribd-Unternehmen logo
1 von 19
Entenda LISP em 15
     minutos
23º encontro do GURU-SP




18/05/2012
Eu
Plínio Balduino - desenvolvedor e curioso
Balducas - @p_balduino
An elegant weapon




                http://xkcd.com/297/
Um pouco de história




Criada em 1958 por John McCarthy
Implementada pela primeira vez por Steve Russell, como LISP 1
Um pouco de história




Nem o próprio John McCarthy acreditou que era possível
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)
Definição
Atualmente LISP se refere a toda uma família de linguagens:
  AutoLISP
  Arc
  EmacsLISP
  Lucio
  Common Lisp
  Scheme
  Clojure
  Racket
  Chicken
E daí? A platéia já está bocejando.
Linguagens "comuns" usam notação infixa
Essa tal notação prefixa
#Rb
  uy

1+2+3+4+5+6

1+( *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)
   *  )
Ainda estão bocejando
LISP trabalha diretamente na árvore sintática (notação prefixa)




Não existe o conceito de precedência de operadores
Código e dados recebem o mesmo
tratamento
;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:
/ JvSrp
 / aacit

fnto 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:
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?
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
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
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 ))
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
Perguntas?




'(obrigado!)

Weitere ähnliche Inhalte

Andere mochten auch

Introduction to lambda expression & lambda calculus
Introduction to lambda expression & lambda calculusIntroduction to lambda expression & lambda calculus
Introduction to lambda expression & lambda calculusKim Leo
 
The Lambda Calculus and The JavaScript
The Lambda Calculus and The JavaScriptThe Lambda Calculus and The JavaScript
The Lambda Calculus and The JavaScriptNorman Richards
 
Functional Programming Fundamentals
Functional Programming FundamentalsFunctional Programming Fundamentals
Functional Programming FundamentalsShahriar Hyder
 

Andere mochten auch (7)

Congreso
CongresoCongreso
Congreso
 
Introduction to lambda expression & lambda calculus
Introduction to lambda expression & lambda calculusIntroduction to lambda expression & lambda calculus
Introduction to lambda expression & lambda calculus
 
Lambda calculus
Lambda calculusLambda calculus
Lambda calculus
 
The Lambda Calculus and The JavaScript
The Lambda Calculus and The JavaScriptThe Lambda Calculus and The JavaScript
The Lambda Calculus and The JavaScript
 
Lambda Calculus
Lambda CalculusLambda Calculus
Lambda Calculus
 
LISP: Introduction to lisp
LISP: Introduction to lispLISP: Introduction to lisp
LISP: Introduction to lisp
 
Functional Programming Fundamentals
Functional Programming FundamentalsFunctional Programming Fundamentals
Functional Programming Fundamentals
 

Ähnlich wie Entenda LISP em 15 minutos

Curso de ShellScript - Lm02 shellscript2
Curso de ShellScript - Lm02 shellscript2Curso de ShellScript - Lm02 shellscript2
Curso de ShellScript - Lm02 shellscript2Pessoal
 
Guia com mais de 500 comandos do linux explicados computeiro da depressão
Guia com mais de 500 comandos do linux explicados   computeiro da depressãoGuia com mais de 500 comandos do linux explicados   computeiro da depressão
Guia com mais de 500 comandos do linux explicados computeiro da depressãoJesser Martins Medeiros
 
Tornado mais do que um framework bonitinho
Tornado   mais do que um framework bonitinhoTornado   mais do que um framework bonitinho
Tornado mais do que um framework bonitinhoMarcel Nicolay
 
Lp script pug-pe
Lp script pug-peLp script pug-pe
Lp script pug-pehugoesb
 
Programação funcional
Programação funcionalProgramação funcional
Programação funcionalLP Maquinas
 
A Linguagem Lua - Uma abordagem inicial
A Linguagem Lua - Uma abordagem inicialA Linguagem Lua - Uma abordagem inicial
A Linguagem Lua - Uma abordagem inicialFlávio Schuindt
 
Escrevendo modulos python com rust
Escrevendo modulos python com rustEscrevendo modulos python com rust
Escrevendo modulos python com rustBruno Rocha
 
Curso de ShellScript - Lm05 shellscript5
Curso de ShellScript - Lm05 shellscript5Curso de ShellScript - Lm05 shellscript5
Curso de ShellScript - Lm05 shellscript5Pessoal
 
Apresentação sobre a linguagem lua
Apresentação sobre a linguagem luaApresentação sobre a linguagem lua
Apresentação sobre a linguagem luaRafael Sanches
 
SAC - Seismic Analyses Code
SAC - Seismic Analyses CodeSAC - Seismic Analyses Code
SAC - Seismic Analyses CodeGeorge Franca
 
SAC - Seismic Analyses Code
SAC - Seismic Analyses CodeSAC - Seismic Analyses Code
SAC - Seismic Analyses CodeGeorge Franca
 
Ruby e Erlang de mãos dadas
Ruby e Erlang de mãos dadasRuby e Erlang de mãos dadas
Ruby e Erlang de mãos dadasÉverton Ribeiro
 
Sapo sessions linux power tools
Sapo sessions linux power toolsSapo sessions linux power tools
Sapo sessions linux power toolsArmando Reis
 
Python Funcional
Python FuncionalPython Funcional
Python Funcionalpugpe
 
Análise de Código Malicioso no Linux
Análise de Código Malicioso no LinuxAnálise de Código Malicioso no Linux
Análise de Código Malicioso no Linuxcrimesciberneticos
 
Algoritmo de ordenação heapsort.
Algoritmo de ordenação heapsort.Algoritmo de ordenação heapsort.
Algoritmo de ordenação heapsort.Thaci Santos
 

Ähnlich wie Entenda LISP em 15 minutos (20)

Curso de ShellScript - Lm02 shellscript2
Curso de ShellScript - Lm02 shellscript2Curso de ShellScript - Lm02 shellscript2
Curso de ShellScript - Lm02 shellscript2
 
Guia com mais de 500 comandos do linux explicados computeiro da depressão
Guia com mais de 500 comandos do linux explicados   computeiro da depressãoGuia com mais de 500 comandos do linux explicados   computeiro da depressão
Guia com mais de 500 comandos do linux explicados computeiro da depressão
 
Tornado mais do que um framework bonitinho
Tornado   mais do que um framework bonitinhoTornado   mais do que um framework bonitinho
Tornado mais do que um framework bonitinho
 
Lp script pug-pe
Lp script pug-peLp script pug-pe
Lp script pug-pe
 
Programação funcional
Programação funcionalProgramação funcional
Programação funcional
 
A Linguagem Lua - Uma abordagem inicial
A Linguagem Lua - Uma abordagem inicialA Linguagem Lua - Uma abordagem inicial
A Linguagem Lua - Uma abordagem inicial
 
scilab aula 05
scilab  aula 05scilab  aula 05
scilab aula 05
 
Cool 3 assembly para linux
Cool 3   assembly para linuxCool 3   assembly para linux
Cool 3 assembly para linux
 
Escrevendo modulos python com rust
Escrevendo modulos python com rustEscrevendo modulos python com rust
Escrevendo modulos python com rust
 
Curso de ShellScript - Lm05 shellscript5
Curso de ShellScript - Lm05 shellscript5Curso de ShellScript - Lm05 shellscript5
Curso de ShellScript - Lm05 shellscript5
 
Apresentação sobre a linguagem lua
Apresentação sobre a linguagem luaApresentação sobre a linguagem lua
Apresentação sobre a linguagem lua
 
SAC - Aula 1
SAC - Aula 1SAC - Aula 1
SAC - Aula 1
 
SAC - Seismic Analyses Code
SAC - Seismic Analyses CodeSAC - Seismic Analyses Code
SAC - Seismic Analyses Code
 
SAC - Seismic Analyses Code
SAC - Seismic Analyses CodeSAC - Seismic Analyses Code
SAC - Seismic Analyses Code
 
Ruby e Erlang de mãos dadas
Ruby e Erlang de mãos dadasRuby e Erlang de mãos dadas
Ruby e Erlang de mãos dadas
 
Sapo sessions linux power tools
Sapo sessions linux power toolsSapo sessions linux power tools
Sapo sessions linux power tools
 
Pythonfuncional
PythonfuncionalPythonfuncional
Pythonfuncional
 
Python Funcional
Python FuncionalPython Funcional
Python Funcional
 
Análise de Código Malicioso no Linux
Análise de Código Malicioso no LinuxAnálise de Código Malicioso no Linux
Análise de Código Malicioso no Linux
 
Algoritmo de ordenação heapsort.
Algoritmo de ordenação heapsort.Algoritmo de ordenação heapsort.
Algoritmo de ordenação heapsort.
 

Entenda LISP em 15 minutos

  • 1. Entenda LISP em 15 minutos
  • 2. 23º encontro do GURU-SP 18/05/2012
  • 3. Eu Plínio Balduino - desenvolvedor e curioso Balducas - @p_balduino
  • 4. An elegant weapon http://xkcd.com/297/
  • 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
  • 10. Essa tal notação prefixa #Rb uy 1+2+3+4+5+6 1+( *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. Ainda estão bocejando LISP trabalha diretamente na árvore sintática (notação prefixa) Não existe o conceito de precedência de operadores
  • 12. Código e dados recebem o mesmo tratamento ;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. / JvSrp / aacit fnto 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. 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