SlideShare uma empresa Scribd logo
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!)

Mais conteúdo relacionado

Destaque

Congreso
CongresoCongreso
Congreso
degumaria
 
Introduction to lambda expression & lambda calculus
Introduction to lambda expression & lambda calculusIntroduction to lambda expression & lambda calculus
Introduction to lambda expression & lambda calculus
Kim Leo
 
Lambda calculus
Lambda calculusLambda calculus
Lambda calculus
Diego Mendonça
 
The Lambda Calculus and The JavaScript
The Lambda Calculus and The JavaScriptThe Lambda Calculus and The JavaScript
The Lambda Calculus and The JavaScript
Norman Richards
 
Lambda Calculus
Lambda CalculusLambda Calculus
Lambda Calculus
K. N. Toosi University
 
LISP: Introduction to lisp
LISP: Introduction to lispLISP: Introduction to lisp
LISP: Introduction to lisp
DataminingTools Inc
 
Functional Programming Fundamentals
Functional Programming FundamentalsFunctional Programming Fundamentals
Functional Programming Fundamentals
Shahriar Hyder
 

Destaque (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
 

Semelhante a 23º GURU-SP - Entenda LISP em 15 minutos

Curso de ShellScript - Lm02 shellscript2
Curso de ShellScript - Lm02 shellscript2Curso de ShellScript - Lm02 shellscript2
Curso de ShellScript - Lm02 shellscript2
Pessoal
 
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
Jesser 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 bonitinho
Marcel Nicolay
 
Lp script pug-pe
Lp script pug-peLp script pug-pe
Lp script pug-pe
hugoesb
 
Programação funcional
Programação funcionalProgramação funcional
Programação funcional
LP Maquinas
 
A Linguagem Lua - Uma abordagem inicial
A Linguagem Lua - Uma abordagem inicialA Linguagem Lua - Uma abordagem inicial
A Linguagem Lua - Uma abordagem inicial
Flávio Schuindt
 
scilab aula 05
scilab  aula 05scilab  aula 05
scilab aula 05
Tomás Ribeiro
 
Cool 3 assembly para linux
Cool 3   assembly para linuxCool 3   assembly para linux
Cool 3 assembly para linux
Luiz Vieira .´. CISSP, OSCE, GXPN, CEH
 
Escrevendo modulos python com rust
Escrevendo modulos python com rustEscrevendo modulos python com rust
Escrevendo modulos python com rust
Bruno Rocha
 
Curso de ShellScript - Lm05 shellscript5
Curso de ShellScript - Lm05 shellscript5Curso de ShellScript - Lm05 shellscript5
Curso de ShellScript - Lm05 shellscript5
Pessoal
 
Apresentação sobre a linguagem lua
Apresentação sobre a linguagem luaApresentação sobre a linguagem lua
Apresentação sobre a linguagem lua
Rafael Sanches
 
SAC - Aula 1
SAC - Aula 1SAC - Aula 1
SAC - Aula 1
George Franca
 
SAC - Seismic Analyses Code
SAC - Seismic Analyses CodeSAC - Seismic Analyses Code
SAC - Seismic Analyses Code
George Franca
 
SAC - Seismic Analyses Code
SAC - Seismic Analyses CodeSAC - Seismic Analyses Code
SAC - Seismic Analyses Code
George 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 tools
Armando Reis
 
Python Funcional
Python FuncionalPython Funcional
Python Funcional
pugpe
 
Pythonfuncional
PythonfuncionalPythonfuncional
Pythonfuncional
Rodrigo Lira
 
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
crimesciberneticos
 
Algoritmo de ordenação heapsort.
Algoritmo de ordenação heapsort.Algoritmo de ordenação heapsort.
Algoritmo de ordenação heapsort.
Thaci Santos
 

Semelhante a 23º GURU-SP - 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
 
Python Funcional
Python FuncionalPython Funcional
Python Funcional
 
Pythonfuncional
PythonfuncionalPythonfuncional
Pythonfuncional
 
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.
 

Último

História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
TomasSousa7
 
Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
joaovmp3
 
Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
Danilo Pinotti
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
Momento da Informática
 
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdfEscola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Gabriel de Mattos Faustino
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
Momento da Informática
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
Faga1939
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
WELITONNOGUEIRA3
 

Último (8)

História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
 
Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
 
Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
 
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdfEscola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
 

23º GURU-SP - 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