SlideShare uma empresa Scribd logo
Programação Funcional
em Haskell
1a Reunião — Apresentação
Conteúdo e objetivos
 Introdução à programação funcional usando Haskell
 Objetivos de aprendizagem
 Apresentar funções algumas funções da linguagem haskell;
 Definir funções usando equações com padrões e guardas;
 Implementar algoritmos recursivos elementares;
Funcionamento
 Reuniões 2 x 2 h por semana
 Página web Learn you a Haskell for great good!
http://learnyouahaskell.com/
http://haskell.tailorfontela.com.br/introduction
O que é a programação
funcional?
 É um paradigma de programação
 No paradigma imperativo, um programa é uma sequência
de instruções que mudam células na memória
 No paradigma funcional, um programa é um conjunto de
definições de funções que aplicamos a valores
 Exemplos de linguagens: Scheme, ML, O’Caml, Haskell, F#,
Scala, Lisp
Exemplo: somar os naturais de 1 a
10
 Em linguagem C:
total = 0;
for (i=1; i<=10; ++i)
total = total + i;
 O programa é uma sequência de instruções
 O resultado é obtido por mutação das variáveis i e total
Exemplo: somar os naturais de 1 a
10
 Em Haskell:
sum [1..10]
 O programa consiste na aplicação da função sum à lista dos
inteiros entre 1 e 10.
Vantagens da programação
funcional
 Nível mais alto
Programas mais concisos
 Concorrencia/paralelismo
A ordem de execução não afeta os resultados
Desvantagens da programação
funcional
 Maior distância do hardware
Compiladores/interpretadores mais complexos;
Difícil prever os custos de execução (tempo/espaço);
Haskell no mundo real
 Algumas exemplos open-source:
GHC o compilador de Haskell é escrito em Haskell (!)
Darcs um sistema distribuido para gestão de
código-fonte
Haskell no mundo real
 Utilizações em backend de aplicações web:
Bump mover ficheiros entre smartphones
http://devblog.bu.mp/haskell-at-bump
Janrain plataforma de user management
http://janrain.com/blog/
functional-programming-social-web
Chordify extração de acordes musicais
http://chordify.net
Mais exemplos:
http://www.haskell.org/haskellwiki/Haskell_in_industry
Glasgow Haskell Compiler (GHC)
 Compilador que gera código-máquina nativo
 Suporta Haskell 98, Haskell 2010 e bastantes extensões
 Inclui também o interpretador ghci.
 Disponível em http://www.haskell.org/ghc
Algumas funções
> head [1,2,3,4] obter o 1o elemento
1
> tail [1,2,3,4] remover o 1º elemento
[2,3,4]
> length [1,2,3,4,5] comprimento
5
> take 3 [1,2,3,4,5] obter um prefixo
[1,2,3]
> drop 3 [1,2,3,4,5] remover um prefixo
[4,5]
Algumas funções
> [1,2,3] ++ [4,5] concatenar
[1,2,3,4,5]
> reverse [1,2,3,4,5] inverter
[5,4,3,2,1]
> [1,2,3,4,5] !! 3 indexação
4
> sum [1,2,3,4,5] soma dos elementos
15
> product [1,2,3,4,5] produto dos elementos
120
Comandos úteis do interpretador
GHCi
:load fich carregar um ficheiro
:reload re-carregar modificações
:edit editar o ficheiro actual
:set editor prog definir o editor
:type expr mostrar o tipo duma expressão
:help obter ajuda
:quit terminar a sessão
 Podem ser abreviados, :l em vez de :load.
Indentação
Todas as definições num mesmo âmbito devem começar na
mesma coluna.
a = 1 a = 1 a = 1
b = 2 b = 2 b = 2
c = 3 c = 3 c = 3
ERRADO ERRADO OK
A ordem das definições não é relevante.
Comentários
Simples: começam por -- até ao final da linha
Geral: delimitados por {- e -}
-- média de dois valores
media x y = (x+y)/2
{- ** as definições seguintes estão comentadas **
dobro x = x+x
quadrado x = x*x
-}.

Mais conteúdo relacionado

Semelhante a Haskell aula1 apresentação

TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
tdc-globalcode
 
PHP GERAL
PHP GERALPHP GERAL
PHP GERAL
Lucas Batistussi
 
Automação de Aplicativos: Scripting com Python
Automação de Aplicativos: Scripting com PythonAutomação de Aplicativos: Scripting com Python
Automação de Aplicativos: Scripting com Python
Fabio Spanhol
 
Object pascal
Object pascalObject pascal
T10_LM3: Subalgoritmos/funções (2013-2014)
T10_LM3: Subalgoritmos/funções (2013-2014)T10_LM3: Subalgoritmos/funções (2013-2014)
T10_LM3: Subalgoritmos/funções (2013-2014)
Carlos Santos
 
Zephir
ZephirZephir
Zephir
Luiz Gavinho
 
M2ti - Python Brasil
M2ti - Python BrasilM2ti - Python Brasil
M2ti - Python Brasil
Rodrigo Hübner
 
Haskell - Introdução
Haskell - IntroduçãoHaskell - Introdução
Haskell - Introdução
Fabio Moura Pereira
 
Linguagens de programação
Linguagens de programaçãoLinguagens de programação
Linguagens de programação
Elaine Cecília Gatto
 
Cakephp 2.0 - O que mudou
Cakephp 2.0 - O que mudouCakephp 2.0 - O que mudou
Cakephp 2.0 - O que mudou
Felipe Vargas Rigo
 
Linguagem de programação haskell
Linguagem de programação haskellLinguagem de programação haskell
Linguagem de programação haskell
Daniel Farias
 
Haskell motivação
Haskell motivaçãoHaskell motivação
Haskell motivação
CRISLANIO MACEDO
 
P funcional
P funcionalP funcional
P funcional
Renato Bento
 
Cucumber: um breve review
Cucumber: um breve reviewCucumber: um breve review
Cucumber: um breve review
Laís Berlatto
 
PHP Presente e Futuro
PHP Presente e FuturoPHP Presente e Futuro
PHP Presente e Futuro
Felipe Vargas Rigo
 
PHP, Presente e Futuro
PHP, Presente e FuturoPHP, Presente e Futuro
PHP, Presente e Futuro
Freedom DayMS
 
Minicurso - funcional (CTI/2019)
Minicurso - funcional (CTI/2019)Minicurso - funcional (CTI/2019)
Minicurso - funcional (CTI/2019)
Pedro Alcantara
 
Desenvolvimento de Software I - USBWEBSERVER - PHP
Desenvolvimento de Software I - USBWEBSERVER - PHPDesenvolvimento de Software I - USBWEBSERVER - PHP
Desenvolvimento de Software I - USBWEBSERVER - PHP
Andréia Santos
 
40 php orientado a objetos
40 php orientado a objetos40 php orientado a objetos
40 php orientado a objetos
Francisco Santos
 
php orientado_a_objetos
php orientado_a_objetosphp orientado_a_objetos
php orientado_a_objetos
Fer Nando
 

Semelhante a Haskell aula1 apresentação (20)

TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
 
PHP GERAL
PHP GERALPHP GERAL
PHP GERAL
 
Automação de Aplicativos: Scripting com Python
Automação de Aplicativos: Scripting com PythonAutomação de Aplicativos: Scripting com Python
Automação de Aplicativos: Scripting com Python
 
Object pascal
Object pascalObject pascal
Object pascal
 
T10_LM3: Subalgoritmos/funções (2013-2014)
T10_LM3: Subalgoritmos/funções (2013-2014)T10_LM3: Subalgoritmos/funções (2013-2014)
T10_LM3: Subalgoritmos/funções (2013-2014)
 
Zephir
ZephirZephir
Zephir
 
M2ti - Python Brasil
M2ti - Python BrasilM2ti - Python Brasil
M2ti - Python Brasil
 
Haskell - Introdução
Haskell - IntroduçãoHaskell - Introdução
Haskell - Introdução
 
Linguagens de programação
Linguagens de programaçãoLinguagens de programação
Linguagens de programação
 
Cakephp 2.0 - O que mudou
Cakephp 2.0 - O que mudouCakephp 2.0 - O que mudou
Cakephp 2.0 - O que mudou
 
Linguagem de programação haskell
Linguagem de programação haskellLinguagem de programação haskell
Linguagem de programação haskell
 
Haskell motivação
Haskell motivaçãoHaskell motivação
Haskell motivação
 
P funcional
P funcionalP funcional
P funcional
 
Cucumber: um breve review
Cucumber: um breve reviewCucumber: um breve review
Cucumber: um breve review
 
PHP Presente e Futuro
PHP Presente e FuturoPHP Presente e Futuro
PHP Presente e Futuro
 
PHP, Presente e Futuro
PHP, Presente e FuturoPHP, Presente e Futuro
PHP, Presente e Futuro
 
Minicurso - funcional (CTI/2019)
Minicurso - funcional (CTI/2019)Minicurso - funcional (CTI/2019)
Minicurso - funcional (CTI/2019)
 
Desenvolvimento de Software I - USBWEBSERVER - PHP
Desenvolvimento de Software I - USBWEBSERVER - PHPDesenvolvimento de Software I - USBWEBSERVER - PHP
Desenvolvimento de Software I - USBWEBSERVER - PHP
 
40 php orientado a objetos
40 php orientado a objetos40 php orientado a objetos
40 php orientado a objetos
 
php orientado_a_objetos
php orientado_a_objetosphp orientado_a_objetos
php orientado_a_objetos
 

Mais de CRISLANIO MACEDO

Record Deduplication and Record Linkage
Record Deduplication and  Record LinkageRecord Deduplication and  Record Linkage
Record Deduplication and Record Linkage
CRISLANIO MACEDO
 
Pitch selo sebrae - Hackathon 2019
Pitch selo sebrae - Hackathon 2019Pitch selo sebrae - Hackathon 2019
Pitch selo sebrae - Hackathon 2019
CRISLANIO MACEDO
 
Pitch Medbloc
Pitch MedblocPitch Medbloc
Pitch Medbloc
CRISLANIO MACEDO
 
Search based gravitational algorithm
Search based gravitational algorithmSearch based gravitational algorithm
Search based gravitational algorithm
CRISLANIO MACEDO
 
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
CRISLANIO MACEDO
 
Integración de métodos ágiles a una empresa de nivel 5 cmmi dev- un caso de e...
Integración de métodos ágiles a una empresa de nivel 5 cmmi dev- un caso de e...Integración de métodos ágiles a una empresa de nivel 5 cmmi dev- un caso de e...
Integración de métodos ágiles a una empresa de nivel 5 cmmi dev- un caso de e...
CRISLANIO MACEDO
 
JGROUPS- A Toolkit for Reliable Multicast Communication
JGROUPS- A Toolkit for Reliable Multicast CommunicationJGROUPS- A Toolkit for Reliable Multicast Communication
JGROUPS- A Toolkit for Reliable Multicast Communication
CRISLANIO MACEDO
 
Inteligência artificial algumas técnicas aplicadas em jogos
Inteligência artificial  algumas técnicas aplicadas em jogosInteligência artificial  algumas técnicas aplicadas em jogos
Inteligência artificial algumas técnicas aplicadas em jogos
CRISLANIO MACEDO
 
Artigo ia traps, invariants, and dead-ends
Artigo ia   traps, invariants, and dead-endsArtigo ia   traps, invariants, and dead-ends
Artigo ia traps, invariants, and dead-ends
CRISLANIO MACEDO
 
Análise dos dados abertos do governo federal
Análise dos dados abertos do governo federalAnálise dos dados abertos do governo federal
Análise dos dados abertos do governo federal
CRISLANIO MACEDO
 
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
CRISLANIO MACEDO
 
Sistema de denúncia de desperdício de água - Etapa de Avaliação
Sistema de denúncia de desperdício de água - Etapa de AvaliaçãoSistema de denúncia de desperdício de água - Etapa de Avaliação
Sistema de denúncia de desperdício de água - Etapa de Avaliação
CRISLANIO MACEDO
 
Sistema de denúncia de desperdício de água - Etapa de Síntese
Sistema de denúncia de desperdício de água - Etapa de SínteseSistema de denúncia de desperdício de água - Etapa de Síntese
Sistema de denúncia de desperdício de água - Etapa de Síntese
CRISLANIO MACEDO
 
Resolução lista2
Resolução lista2Resolução lista2
Resolução lista2
CRISLANIO MACEDO
 
Resoluçãohaskell2
Resoluçãohaskell2Resoluçãohaskell2
Resoluçãohaskell2
CRISLANIO MACEDO
 
Haskell ufc quixadalista2
Haskell ufc quixadalista2Haskell ufc quixadalista2
Haskell ufc quixadalista2
CRISLANIO MACEDO
 
Haskell ufc quixadalista1
Haskell ufc quixadalista1Haskell ufc quixadalista1
Haskell ufc quixadalista1
CRISLANIO MACEDO
 
Haskell motivaçãoaula2
Haskell motivaçãoaula2Haskell motivaçãoaula2
Haskell motivaçãoaula2
CRISLANIO MACEDO
 
Haskell aula7 libs_intro_arquivos
Haskell aula7 libs_intro_arquivosHaskell aula7 libs_intro_arquivos
Haskell aula7 libs_intro_arquivos
CRISLANIO MACEDO
 
Haskell aula5 f.ordem-sup_modulos-cifra_cesar
Haskell aula5 f.ordem-sup_modulos-cifra_cesarHaskell aula5 f.ordem-sup_modulos-cifra_cesar
Haskell aula5 f.ordem-sup_modulos-cifra_cesar
CRISLANIO MACEDO
 

Mais de CRISLANIO MACEDO (20)

Record Deduplication and Record Linkage
Record Deduplication and  Record LinkageRecord Deduplication and  Record Linkage
Record Deduplication and Record Linkage
 
Pitch selo sebrae - Hackathon 2019
Pitch selo sebrae - Hackathon 2019Pitch selo sebrae - Hackathon 2019
Pitch selo sebrae - Hackathon 2019
 
Pitch Medbloc
Pitch MedblocPitch Medbloc
Pitch Medbloc
 
Search based gravitational algorithm
Search based gravitational algorithmSearch based gravitational algorithm
Search based gravitational algorithm
 
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
 
Integración de métodos ágiles a una empresa de nivel 5 cmmi dev- un caso de e...
Integración de métodos ágiles a una empresa de nivel 5 cmmi dev- un caso de e...Integración de métodos ágiles a una empresa de nivel 5 cmmi dev- un caso de e...
Integración de métodos ágiles a una empresa de nivel 5 cmmi dev- un caso de e...
 
JGROUPS- A Toolkit for Reliable Multicast Communication
JGROUPS- A Toolkit for Reliable Multicast CommunicationJGROUPS- A Toolkit for Reliable Multicast Communication
JGROUPS- A Toolkit for Reliable Multicast Communication
 
Inteligência artificial algumas técnicas aplicadas em jogos
Inteligência artificial  algumas técnicas aplicadas em jogosInteligência artificial  algumas técnicas aplicadas em jogos
Inteligência artificial algumas técnicas aplicadas em jogos
 
Artigo ia traps, invariants, and dead-ends
Artigo ia   traps, invariants, and dead-endsArtigo ia   traps, invariants, and dead-ends
Artigo ia traps, invariants, and dead-ends
 
Análise dos dados abertos do governo federal
Análise dos dados abertos do governo federalAnálise dos dados abertos do governo federal
Análise dos dados abertos do governo federal
 
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
 
Sistema de denúncia de desperdício de água - Etapa de Avaliação
Sistema de denúncia de desperdício de água - Etapa de AvaliaçãoSistema de denúncia de desperdício de água - Etapa de Avaliação
Sistema de denúncia de desperdício de água - Etapa de Avaliação
 
Sistema de denúncia de desperdício de água - Etapa de Síntese
Sistema de denúncia de desperdício de água - Etapa de SínteseSistema de denúncia de desperdício de água - Etapa de Síntese
Sistema de denúncia de desperdício de água - Etapa de Síntese
 
Resolução lista2
Resolução lista2Resolução lista2
Resolução lista2
 
Resoluçãohaskell2
Resoluçãohaskell2Resoluçãohaskell2
Resoluçãohaskell2
 
Haskell ufc quixadalista2
Haskell ufc quixadalista2Haskell ufc quixadalista2
Haskell ufc quixadalista2
 
Haskell ufc quixadalista1
Haskell ufc quixadalista1Haskell ufc quixadalista1
Haskell ufc quixadalista1
 
Haskell motivaçãoaula2
Haskell motivaçãoaula2Haskell motivaçãoaula2
Haskell motivaçãoaula2
 
Haskell aula7 libs_intro_arquivos
Haskell aula7 libs_intro_arquivosHaskell aula7 libs_intro_arquivos
Haskell aula7 libs_intro_arquivos
 
Haskell aula5 f.ordem-sup_modulos-cifra_cesar
Haskell aula5 f.ordem-sup_modulos-cifra_cesarHaskell aula5 f.ordem-sup_modulos-cifra_cesar
Haskell aula5 f.ordem-sup_modulos-cifra_cesar
 

Último

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
 
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
 
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdfDESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
Momento da Informática
 
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
 
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
 
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
 
Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
joaovmp3
 
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)

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
 
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
 
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdfDESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
 
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
 
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...
 
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
 
Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
 

Haskell aula1 apresentação

  • 1. Programação Funcional em Haskell 1a Reunião — Apresentação
  • 2. Conteúdo e objetivos  Introdução à programação funcional usando Haskell  Objetivos de aprendizagem  Apresentar funções algumas funções da linguagem haskell;  Definir funções usando equações com padrões e guardas;  Implementar algoritmos recursivos elementares;
  • 3. Funcionamento  Reuniões 2 x 2 h por semana  Página web Learn you a Haskell for great good! http://learnyouahaskell.com/ http://haskell.tailorfontela.com.br/introduction
  • 4. O que é a programação funcional?  É um paradigma de programação  No paradigma imperativo, um programa é uma sequência de instruções que mudam células na memória  No paradigma funcional, um programa é um conjunto de definições de funções que aplicamos a valores  Exemplos de linguagens: Scheme, ML, O’Caml, Haskell, F#, Scala, Lisp
  • 5. Exemplo: somar os naturais de 1 a 10  Em linguagem C: total = 0; for (i=1; i<=10; ++i) total = total + i;  O programa é uma sequência de instruções  O resultado é obtido por mutação das variáveis i e total
  • 6. Exemplo: somar os naturais de 1 a 10  Em Haskell: sum [1..10]  O programa consiste na aplicação da função sum à lista dos inteiros entre 1 e 10.
  • 7. Vantagens da programação funcional  Nível mais alto Programas mais concisos  Concorrencia/paralelismo A ordem de execução não afeta os resultados
  • 8. Desvantagens da programação funcional  Maior distância do hardware Compiladores/interpretadores mais complexos; Difícil prever os custos de execução (tempo/espaço);
  • 9. Haskell no mundo real  Algumas exemplos open-source: GHC o compilador de Haskell é escrito em Haskell (!) Darcs um sistema distribuido para gestão de código-fonte
  • 10. Haskell no mundo real  Utilizações em backend de aplicações web: Bump mover ficheiros entre smartphones http://devblog.bu.mp/haskell-at-bump Janrain plataforma de user management http://janrain.com/blog/ functional-programming-social-web Chordify extração de acordes musicais http://chordify.net Mais exemplos: http://www.haskell.org/haskellwiki/Haskell_in_industry
  • 11. Glasgow Haskell Compiler (GHC)  Compilador que gera código-máquina nativo  Suporta Haskell 98, Haskell 2010 e bastantes extensões  Inclui também o interpretador ghci.  Disponível em http://www.haskell.org/ghc
  • 12. Algumas funções > head [1,2,3,4] obter o 1o elemento 1 > tail [1,2,3,4] remover o 1º elemento [2,3,4] > length [1,2,3,4,5] comprimento 5 > take 3 [1,2,3,4,5] obter um prefixo [1,2,3] > drop 3 [1,2,3,4,5] remover um prefixo [4,5]
  • 13. Algumas funções > [1,2,3] ++ [4,5] concatenar [1,2,3,4,5] > reverse [1,2,3,4,5] inverter [5,4,3,2,1] > [1,2,3,4,5] !! 3 indexação 4 > sum [1,2,3,4,5] soma dos elementos 15 > product [1,2,3,4,5] produto dos elementos 120
  • 14. Comandos úteis do interpretador GHCi :load fich carregar um ficheiro :reload re-carregar modificações :edit editar o ficheiro actual :set editor prog definir o editor :type expr mostrar o tipo duma expressão :help obter ajuda :quit terminar a sessão  Podem ser abreviados, :l em vez de :load.
  • 15. Indentação Todas as definições num mesmo âmbito devem começar na mesma coluna. a = 1 a = 1 a = 1 b = 2 b = 2 b = 2 c = 3 c = 3 c = 3 ERRADO ERRADO OK A ordem das definições não é relevante.
  • 16. Comentários Simples: começam por -- até ao final da linha Geral: delimitados por {- e -} -- média de dois valores media x y = (x+y)/2 {- ** as definições seguintes estão comentadas ** dobro x = x+x quadrado x = x*x -}.