capítulo 1 paradigmas de programação - decom-ufop · 3 a crise do software 4 algumas...
TRANSCRIPT
![Page 1: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/1.jpg)
1/29
Programação Funcional
Capítulo 1
Paradigmas de Programação
José Romildo Malaquias
Departamento de ComputaçãoUniversidade Federal de Ouro Preto
2016.2
![Page 2: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/2.jpg)
2/29
1 Paradigmas de programação
2 Programação funcional
3 A crise do software
4 Algumas características de Haskell
5 Antecedentes históricos
6 Algumas empresas que usam Haskell
7 Curso online
![Page 3: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/3.jpg)
3/29
Tópicos
1 Paradigmas de programação
2 Programação funcional
3 A crise do software
4 Algumas características de Haskell
5 Antecedentes históricos
6 Algumas empresas que usam Haskell
7 Curso online
![Page 4: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/4.jpg)
4/29
Paradigmas de programação
Um paradigma de programação fornece e determina a visão que oprogramador possui sobre a estruturação e a execução do programa.Por exemplo:
Em programação orientada a objetos, programadores podem abstrair umprograma como uma coleção de objetos que interagem entre si.Em programação lógica os programadores abstraem o programa como umconjunto de predicados que estabelecem relações entre objetos (axiomas), euma meta (teorema) a ser provada usando os predicados.
Diferentes linguagens de programação propõem diferentes paradigmas deprogramação.Algumas linguagens foram desenvolvidas para suportar um paradigmaespecífico.Por exemplo:
Smalltalk, Eiffel e Java suportam o paradigma orientado a objetos.Haskell e Clean suportam o paradigma funcional.OCaml, LISP, Scala, Perl, Python e C++ suportam múltiplos paradigmas.
![Page 5: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/5.jpg)
4/29
Paradigmas de programação
Um paradigma de programação fornece e determina a visão que oprogramador possui sobre a estruturação e a execução do programa.Por exemplo:
Em programação orientada a objetos, programadores podem abstrair umprograma como uma coleção de objetos que interagem entre si.Em programação lógica os programadores abstraem o programa como umconjunto de predicados que estabelecem relações entre objetos (axiomas), euma meta (teorema) a ser provada usando os predicados.
Diferentes linguagens de programação propõem diferentes paradigmas deprogramação.Algumas linguagens foram desenvolvidas para suportar um paradigmaespecífico.Por exemplo:
Smalltalk, Eiffel e Java suportam o paradigma orientado a objetos.Haskell e Clean suportam o paradigma funcional.OCaml, LISP, Scala, Perl, Python e C++ suportam múltiplos paradigmas.
![Page 6: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/6.jpg)
4/29
Paradigmas de programação
Um paradigma de programação fornece e determina a visão que oprogramador possui sobre a estruturação e a execução do programa.Por exemplo:
Em programação orientada a objetos, programadores podem abstrair umprograma como uma coleção de objetos que interagem entre si.Em programação lógica os programadores abstraem o programa como umconjunto de predicados que estabelecem relações entre objetos (axiomas), euma meta (teorema) a ser provada usando os predicados.
Diferentes linguagens de programação propõem diferentes paradigmas deprogramação.Algumas linguagens foram desenvolvidas para suportar um paradigmaespecífico.Por exemplo:
Smalltalk, Eiffel e Java suportam o paradigma orientado a objetos.Haskell e Clean suportam o paradigma funcional.OCaml, LISP, Scala, Perl, Python e C++ suportam múltiplos paradigmas.
![Page 7: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/7.jpg)
4/29
Paradigmas de programação
Um paradigma de programação fornece e determina a visão que oprogramador possui sobre a estruturação e a execução do programa.Por exemplo:
Em programação orientada a objetos, programadores podem abstrair umprograma como uma coleção de objetos que interagem entre si.Em programação lógica os programadores abstraem o programa como umconjunto de predicados que estabelecem relações entre objetos (axiomas), euma meta (teorema) a ser provada usando os predicados.
Diferentes linguagens de programação propõem diferentes paradigmas deprogramação.Algumas linguagens foram desenvolvidas para suportar um paradigmaespecífico.Por exemplo:
Smalltalk, Eiffel e Java suportam o paradigma orientado a objetos.Haskell e Clean suportam o paradigma funcional.OCaml, LISP, Scala, Perl, Python e C++ suportam múltiplos paradigmas.
![Page 8: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/8.jpg)
4/29
Paradigmas de programação
Um paradigma de programação fornece e determina a visão que oprogramador possui sobre a estruturação e a execução do programa.Por exemplo:
Em programação orientada a objetos, programadores podem abstrair umprograma como uma coleção de objetos que interagem entre si.Em programação lógica os programadores abstraem o programa como umconjunto de predicados que estabelecem relações entre objetos (axiomas), euma meta (teorema) a ser provada usando os predicados.
Diferentes linguagens de programação propõem diferentes paradigmas deprogramação.Algumas linguagens foram desenvolvidas para suportar um paradigmaespecífico.Por exemplo:
Smalltalk, Eiffel e Java suportam o paradigma orientado a objetos.Haskell e Clean suportam o paradigma funcional.OCaml, LISP, Scala, Perl, Python e C++ suportam múltiplos paradigmas.
![Page 9: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/9.jpg)
4/29
Paradigmas de programação
Um paradigma de programação fornece e determina a visão que oprogramador possui sobre a estruturação e a execução do programa.Por exemplo:
Em programação orientada a objetos, programadores podem abstrair umprograma como uma coleção de objetos que interagem entre si.Em programação lógica os programadores abstraem o programa como umconjunto de predicados que estabelecem relações entre objetos (axiomas), euma meta (teorema) a ser provada usando os predicados.
Diferentes linguagens de programação propõem diferentes paradigmas deprogramação.Algumas linguagens foram desenvolvidas para suportar um paradigmaespecífico.Por exemplo:
Smalltalk, Eiffel e Java suportam o paradigma orientado a objetos.Haskell e Clean suportam o paradigma funcional.OCaml, LISP, Scala, Perl, Python e C++ suportam múltiplos paradigmas.
![Page 10: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/10.jpg)
4/29
Paradigmas de programação
Um paradigma de programação fornece e determina a visão que oprogramador possui sobre a estruturação e a execução do programa.Por exemplo:
Em programação orientada a objetos, programadores podem abstrair umprograma como uma coleção de objetos que interagem entre si.Em programação lógica os programadores abstraem o programa como umconjunto de predicados que estabelecem relações entre objetos (axiomas), euma meta (teorema) a ser provada usando os predicados.
Diferentes linguagens de programação propõem diferentes paradigmas deprogramação.Algumas linguagens foram desenvolvidas para suportar um paradigmaespecífico.Por exemplo:
Smalltalk, Eiffel e Java suportam o paradigma orientado a objetos.Haskell e Clean suportam o paradigma funcional.OCaml, LISP, Scala, Perl, Python e C++ suportam múltiplos paradigmas.
![Page 11: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/11.jpg)
4/29
Paradigmas de programação
Um paradigma de programação fornece e determina a visão que oprogramador possui sobre a estruturação e a execução do programa.Por exemplo:
Em programação orientada a objetos, programadores podem abstrair umprograma como uma coleção de objetos que interagem entre si.Em programação lógica os programadores abstraem o programa como umconjunto de predicados que estabelecem relações entre objetos (axiomas), euma meta (teorema) a ser provada usando os predicados.
Diferentes linguagens de programação propõem diferentes paradigmas deprogramação.Algumas linguagens foram desenvolvidas para suportar um paradigmaespecífico.Por exemplo:
Smalltalk, Eiffel e Java suportam o paradigma orientado a objetos.Haskell e Clean suportam o paradigma funcional.OCaml, LISP, Scala, Perl, Python e C++ suportam múltiplos paradigmas.
![Page 12: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/12.jpg)
4/29
Paradigmas de programação
Um paradigma de programação fornece e determina a visão que oprogramador possui sobre a estruturação e a execução do programa.Por exemplo:
Em programação orientada a objetos, programadores podem abstrair umprograma como uma coleção de objetos que interagem entre si.Em programação lógica os programadores abstraem o programa como umconjunto de predicados que estabelecem relações entre objetos (axiomas), euma meta (teorema) a ser provada usando os predicados.
Diferentes linguagens de programação propõem diferentes paradigmas deprogramação.Algumas linguagens foram desenvolvidas para suportar um paradigmaespecífico.Por exemplo:
Smalltalk, Eiffel e Java suportam o paradigma orientado a objetos.Haskell e Clean suportam o paradigma funcional.OCaml, LISP, Scala, Perl, Python e C++ suportam múltiplos paradigmas.
![Page 13: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/13.jpg)
4/29
Paradigmas de programação
Um paradigma de programação fornece e determina a visão que oprogramador possui sobre a estruturação e a execução do programa.Por exemplo:
Em programação orientada a objetos, programadores podem abstrair umprograma como uma coleção de objetos que interagem entre si.Em programação lógica os programadores abstraem o programa como umconjunto de predicados que estabelecem relações entre objetos (axiomas), euma meta (teorema) a ser provada usando os predicados.
Diferentes linguagens de programação propõem diferentes paradigmas deprogramação.Algumas linguagens foram desenvolvidas para suportar um paradigmaespecífico.Por exemplo:
Smalltalk, Eiffel e Java suportam o paradigma orientado a objetos.Haskell e Clean suportam o paradigma funcional.OCaml, LISP, Scala, Perl, Python e C++ suportam múltiplos paradigmas.
![Page 14: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/14.jpg)
5/29
Técnicas e paradigmas de programação
Geralmente os paradigmas de programação são diferenciados pelas técnicasde programação que permitem ou proíbem.Por exemplo, a programação estruturada não permite o uso de goto.Esse é um dos motivos pelos quais novos paradigmas são considerados maisrígidos que estilos tradicionais.Apesar disso, evitar certos tipos de técnicas pode facilitar a prova decorreção de um sistema, podendo até mesmo facilitar o desenvolvimento dealgoritmos.O relacionamento entre paradigmas de programação e linguagens deprogramação pode ser complexo pelo fato de linguagens de programaçãopoderem suportar mais de um paradigma.
![Page 15: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/15.jpg)
5/29
Técnicas e paradigmas de programação
Geralmente os paradigmas de programação são diferenciados pelas técnicasde programação que permitem ou proíbem.Por exemplo, a programação estruturada não permite o uso de goto.Esse é um dos motivos pelos quais novos paradigmas são considerados maisrígidos que estilos tradicionais.Apesar disso, evitar certos tipos de técnicas pode facilitar a prova decorreção de um sistema, podendo até mesmo facilitar o desenvolvimento dealgoritmos.O relacionamento entre paradigmas de programação e linguagens deprogramação pode ser complexo pelo fato de linguagens de programaçãopoderem suportar mais de um paradigma.
![Page 16: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/16.jpg)
5/29
Técnicas e paradigmas de programação
Geralmente os paradigmas de programação são diferenciados pelas técnicasde programação que permitem ou proíbem.Por exemplo, a programação estruturada não permite o uso de goto.Esse é um dos motivos pelos quais novos paradigmas são considerados maisrígidos que estilos tradicionais.Apesar disso, evitar certos tipos de técnicas pode facilitar a prova decorreção de um sistema, podendo até mesmo facilitar o desenvolvimento dealgoritmos.O relacionamento entre paradigmas de programação e linguagens deprogramação pode ser complexo pelo fato de linguagens de programaçãopoderem suportar mais de um paradigma.
![Page 17: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/17.jpg)
5/29
Técnicas e paradigmas de programação
Geralmente os paradigmas de programação são diferenciados pelas técnicasde programação que permitem ou proíbem.Por exemplo, a programação estruturada não permite o uso de goto.Esse é um dos motivos pelos quais novos paradigmas são considerados maisrígidos que estilos tradicionais.Apesar disso, evitar certos tipos de técnicas pode facilitar a prova decorreção de um sistema, podendo até mesmo facilitar o desenvolvimento dealgoritmos.O relacionamento entre paradigmas de programação e linguagens deprogramação pode ser complexo pelo fato de linguagens de programaçãopoderem suportar mais de um paradigma.
![Page 18: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/18.jpg)
5/29
Técnicas e paradigmas de programação
Geralmente os paradigmas de programação são diferenciados pelas técnicasde programação que permitem ou proíbem.Por exemplo, a programação estruturada não permite o uso de goto.Esse é um dos motivos pelos quais novos paradigmas são considerados maisrígidos que estilos tradicionais.Apesar disso, evitar certos tipos de técnicas pode facilitar a prova decorreção de um sistema, podendo até mesmo facilitar o desenvolvimento dealgoritmos.O relacionamento entre paradigmas de programação e linguagens deprogramação pode ser complexo pelo fato de linguagens de programaçãopoderem suportar mais de um paradigma.
![Page 19: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/19.jpg)
6/29
Categorias: programação imperativa e declarativa
Programação imperativaDescreve a computação como ações, enunciados ou comandos quemudam o estado (variáveis) de um programa, enfatizando comoresolver um problema.Muito parecidos com o comportamento imperativo das linguagensnaturais que expressam ordens, programas imperativos são umasequência de comandos para o computador executar.O nome do paradigma, imperativo, está ligado ao tempo verbalimperativo, onde o programador diz ao computador: faça isso, depoisisso, depois aquilo...Exemplos: paradigmas
procedimental: C, Pascal, etc, eorientado a objetos: Smalltalk, Java, etc
Programação declarativaDescreve o que o programa faz e não como seus procedimentosfuncionam.Ênfase nos resultados, no que se deseja obter.Exemplos: paradigmas
funcional: Haskell, OCaml, LISP, etc, elógico: Prolog, etc.
![Page 20: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/20.jpg)
6/29
Categorias: programação imperativa e declarativa
Programação imperativaDescreve a computação como ações, enunciados ou comandos quemudam o estado (variáveis) de um programa, enfatizando comoresolver um problema.Muito parecidos com o comportamento imperativo das linguagensnaturais que expressam ordens, programas imperativos são umasequência de comandos para o computador executar.O nome do paradigma, imperativo, está ligado ao tempo verbalimperativo, onde o programador diz ao computador: faça isso, depoisisso, depois aquilo...Exemplos: paradigmas
procedimental: C, Pascal, etc, eorientado a objetos: Smalltalk, Java, etc
Programação declarativaDescreve o que o programa faz e não como seus procedimentosfuncionam.Ênfase nos resultados, no que se deseja obter.Exemplos: paradigmas
funcional: Haskell, OCaml, LISP, etc, elógico: Prolog, etc.
![Page 21: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/21.jpg)
6/29
Categorias: programação imperativa e declarativa
Programação imperativaDescreve a computação como ações, enunciados ou comandos quemudam o estado (variáveis) de um programa, enfatizando comoresolver um problema.Muito parecidos com o comportamento imperativo das linguagensnaturais que expressam ordens, programas imperativos são umasequência de comandos para o computador executar.O nome do paradigma, imperativo, está ligado ao tempo verbalimperativo, onde o programador diz ao computador: faça isso, depoisisso, depois aquilo...Exemplos: paradigmas
procedimental: C, Pascal, etc, eorientado a objetos: Smalltalk, Java, etc
Programação declarativaDescreve o que o programa faz e não como seus procedimentosfuncionam.Ênfase nos resultados, no que se deseja obter.Exemplos: paradigmas
funcional: Haskell, OCaml, LISP, etc, elógico: Prolog, etc.
![Page 22: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/22.jpg)
6/29
Categorias: programação imperativa e declarativa
Programação imperativaDescreve a computação como ações, enunciados ou comandos quemudam o estado (variáveis) de um programa, enfatizando comoresolver um problema.Muito parecidos com o comportamento imperativo das linguagensnaturais que expressam ordens, programas imperativos são umasequência de comandos para o computador executar.O nome do paradigma, imperativo, está ligado ao tempo verbalimperativo, onde o programador diz ao computador: faça isso, depoisisso, depois aquilo...Exemplos: paradigmas
procedimental: C, Pascal, etc, eorientado a objetos: Smalltalk, Java, etc
Programação declarativaDescreve o que o programa faz e não como seus procedimentosfuncionam.Ênfase nos resultados, no que se deseja obter.Exemplos: paradigmas
funcional: Haskell, OCaml, LISP, etc, elógico: Prolog, etc.
![Page 23: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/23.jpg)
6/29
Categorias: programação imperativa e declarativa
Programação imperativaDescreve a computação como ações, enunciados ou comandos quemudam o estado (variáveis) de um programa, enfatizando comoresolver um problema.Muito parecidos com o comportamento imperativo das linguagensnaturais que expressam ordens, programas imperativos são umasequência de comandos para o computador executar.O nome do paradigma, imperativo, está ligado ao tempo verbalimperativo, onde o programador diz ao computador: faça isso, depoisisso, depois aquilo...Exemplos: paradigmas
procedimental: C, Pascal, etc, eorientado a objetos: Smalltalk, Java, etc
Programação declarativaDescreve o que o programa faz e não como seus procedimentosfuncionam.Ênfase nos resultados, no que se deseja obter.Exemplos: paradigmas
funcional: Haskell, OCaml, LISP, etc, elógico: Prolog, etc.
![Page 24: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/24.jpg)
6/29
Categorias: programação imperativa e declarativa
Programação imperativaDescreve a computação como ações, enunciados ou comandos quemudam o estado (variáveis) de um programa, enfatizando comoresolver um problema.Muito parecidos com o comportamento imperativo das linguagensnaturais que expressam ordens, programas imperativos são umasequência de comandos para o computador executar.O nome do paradigma, imperativo, está ligado ao tempo verbalimperativo, onde o programador diz ao computador: faça isso, depoisisso, depois aquilo...Exemplos: paradigmas
procedimental: C, Pascal, etc, eorientado a objetos: Smalltalk, Java, etc
Programação declarativaDescreve o que o programa faz e não como seus procedimentosfuncionam.Ênfase nos resultados, no que se deseja obter.Exemplos: paradigmas
funcional: Haskell, OCaml, LISP, etc, elógico: Prolog, etc.
![Page 25: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/25.jpg)
6/29
Categorias: programação imperativa e declarativa
Programação imperativaDescreve a computação como ações, enunciados ou comandos quemudam o estado (variáveis) de um programa, enfatizando comoresolver um problema.Muito parecidos com o comportamento imperativo das linguagensnaturais que expressam ordens, programas imperativos são umasequência de comandos para o computador executar.O nome do paradigma, imperativo, está ligado ao tempo verbalimperativo, onde o programador diz ao computador: faça isso, depoisisso, depois aquilo...Exemplos: paradigmas
procedimental: C, Pascal, etc, eorientado a objetos: Smalltalk, Java, etc
Programação declarativaDescreve o que o programa faz e não como seus procedimentosfuncionam.Ênfase nos resultados, no que se deseja obter.Exemplos: paradigmas
funcional: Haskell, OCaml, LISP, etc, elógico: Prolog, etc.
![Page 26: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/26.jpg)
6/29
Categorias: programação imperativa e declarativa
Programação imperativaDescreve a computação como ações, enunciados ou comandos quemudam o estado (variáveis) de um programa, enfatizando comoresolver um problema.Muito parecidos com o comportamento imperativo das linguagensnaturais que expressam ordens, programas imperativos são umasequência de comandos para o computador executar.O nome do paradigma, imperativo, está ligado ao tempo verbalimperativo, onde o programador diz ao computador: faça isso, depoisisso, depois aquilo...Exemplos: paradigmas
procedimental: C, Pascal, etc, eorientado a objetos: Smalltalk, Java, etc
Programação declarativaDescreve o que o programa faz e não como seus procedimentosfuncionam.Ênfase nos resultados, no que se deseja obter.Exemplos: paradigmas
funcional: Haskell, OCaml, LISP, etc, elógico: Prolog, etc.
![Page 27: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/27.jpg)
6/29
Categorias: programação imperativa e declarativa
Programação imperativaDescreve a computação como ações, enunciados ou comandos quemudam o estado (variáveis) de um programa, enfatizando comoresolver um problema.Muito parecidos com o comportamento imperativo das linguagensnaturais que expressam ordens, programas imperativos são umasequência de comandos para o computador executar.O nome do paradigma, imperativo, está ligado ao tempo verbalimperativo, onde o programador diz ao computador: faça isso, depoisisso, depois aquilo...Exemplos: paradigmas
procedimental: C, Pascal, etc, eorientado a objetos: Smalltalk, Java, etc
Programação declarativaDescreve o que o programa faz e não como seus procedimentosfuncionam.Ênfase nos resultados, no que se deseja obter.Exemplos: paradigmas
funcional: Haskell, OCaml, LISP, etc, elógico: Prolog, etc.
![Page 28: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/28.jpg)
6/29
Categorias: programação imperativa e declarativa
Programação imperativaDescreve a computação como ações, enunciados ou comandos quemudam o estado (variáveis) de um programa, enfatizando comoresolver um problema.Muito parecidos com o comportamento imperativo das linguagensnaturais que expressam ordens, programas imperativos são umasequência de comandos para o computador executar.O nome do paradigma, imperativo, está ligado ao tempo verbalimperativo, onde o programador diz ao computador: faça isso, depoisisso, depois aquilo...Exemplos: paradigmas
procedimental: C, Pascal, etc, eorientado a objetos: Smalltalk, Java, etc
Programação declarativaDescreve o que o programa faz e não como seus procedimentosfuncionam.Ênfase nos resultados, no que se deseja obter.Exemplos: paradigmas
funcional: Haskell, OCaml, LISP, etc, elógico: Prolog, etc.
![Page 29: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/29.jpg)
6/29
Categorias: programação imperativa e declarativa
Programação imperativaDescreve a computação como ações, enunciados ou comandos quemudam o estado (variáveis) de um programa, enfatizando comoresolver um problema.Muito parecidos com o comportamento imperativo das linguagensnaturais que expressam ordens, programas imperativos são umasequência de comandos para o computador executar.O nome do paradigma, imperativo, está ligado ao tempo verbalimperativo, onde o programador diz ao computador: faça isso, depoisisso, depois aquilo...Exemplos: paradigmas
procedimental: C, Pascal, etc, eorientado a objetos: Smalltalk, Java, etc
Programação declarativaDescreve o que o programa faz e não como seus procedimentosfuncionam.Ênfase nos resultados, no que se deseja obter.Exemplos: paradigmas
funcional: Haskell, OCaml, LISP, etc, elógico: Prolog, etc.
![Page 30: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/30.jpg)
6/29
Categorias: programação imperativa e declarativa
Programação imperativaDescreve a computação como ações, enunciados ou comandos quemudam o estado (variáveis) de um programa, enfatizando comoresolver um problema.Muito parecidos com o comportamento imperativo das linguagensnaturais que expressam ordens, programas imperativos são umasequência de comandos para o computador executar.O nome do paradigma, imperativo, está ligado ao tempo verbalimperativo, onde o programador diz ao computador: faça isso, depoisisso, depois aquilo...Exemplos: paradigmas
procedimental: C, Pascal, etc, eorientado a objetos: Smalltalk, Java, etc
Programação declarativaDescreve o que o programa faz e não como seus procedimentosfuncionam.Ênfase nos resultados, no que se deseja obter.Exemplos: paradigmas
funcional: Haskell, OCaml, LISP, etc, elógico: Prolog, etc.
![Page 31: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/31.jpg)
6/29
Categorias: programação imperativa e declarativa
Programação imperativaDescreve a computação como ações, enunciados ou comandos quemudam o estado (variáveis) de um programa, enfatizando comoresolver um problema.Muito parecidos com o comportamento imperativo das linguagensnaturais que expressam ordens, programas imperativos são umasequência de comandos para o computador executar.O nome do paradigma, imperativo, está ligado ao tempo verbalimperativo, onde o programador diz ao computador: faça isso, depoisisso, depois aquilo...Exemplos: paradigmas
procedimental: C, Pascal, etc, eorientado a objetos: Smalltalk, Java, etc
Programação declarativaDescreve o que o programa faz e não como seus procedimentosfuncionam.Ênfase nos resultados, no que se deseja obter.Exemplos: paradigmas
funcional: Haskell, OCaml, LISP, etc, elógico: Prolog, etc.
![Page 32: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/32.jpg)
7/29
Tópicos
1 Paradigmas de programação
2 Programação funcional
3 A crise do software
4 Algumas características de Haskell
5 Antecedentes históricos
6 Algumas empresas que usam Haskell
7 Curso online
![Page 33: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/33.jpg)
8/29
Programação funcional
Programação funcional é um paradigma de programação que descreve umacomputação como uma expressão a ser avaliada.A principal forma de estruturar o programa é pela definição e aplicação defunções.
![Page 34: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/34.jpg)
9/29
Exemplo: quick sort em C// To sort array a[] of size n: qsort(a,0,n-1)
void qsort(int a[], int lo, int hi) {int h, l, p, t;
if (lo < hi) {l = lo;h = hi;p = a[hi];
do {while ((l < h) && (a[l] <= p))
l = l+1;while ((h > l) && (a[h] >= p))
h = h-1;if (l < h) {
t = a[l];a[l] = a[h];a[h] = t;
}} while (l < h);
a[hi] = a[l];a[l] = p;
qsort(a, lo, l-1);qsort(a, l+1, hi);
}}
![Page 35: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/35.jpg)
10/29
Exemplo: quick sort em Haskell
qs [] = []qs (x:xs) = qs (filter (<x) xs) ++
[x] ++qs (filter (>x) xs)
Observações:[] denota a lista vazia.x:xs denota uma lista não vazia cuja cabeça é x e cuja cauda é xs.Uma lista pode ser escrita enumerando os seus elementos separados por vírgula e colocadosentre colchetes.A sintaxe para aplicação de função consiste em escrever a função seguida dos argumentos,separados por espaços, como em max 10 (2+x).A função filter seleciona os elementos de uma lista que satisfazem uma determinadapropriedade.(<x) e (>x) são funções que verificam se o seu argumento é menor ou maior, respectivamente,do que x. São funções anônimas construídas pela aplicação parcial dos operadores < e >.O operador ++ concatena duas listas.
![Page 36: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/36.jpg)
11/29
Tópicos
1 Paradigmas de programação
2 Programação funcional
3 A crise do software
4 Algumas características de Haskell
5 Antecedentes históricos
6 Algumas empresas que usam Haskell
7 Curso online
![Page 37: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/37.jpg)
12/29
A Crise do Software
Linguagens declarativas (incluindo linguagens funcionais):permitem que programas sejam escritos de forma clara, concisa, e com um altonível de abstração;suportam componentes de software reutilizáveis;incentivam o uso de verificação formal;permitem prototipagem rápida;fornecem poderosas ferramentas de resolução de problemas.
Estas características podem ser úteis na abordagem de dificuldadesencontradas no desenvolvimento de software:
o tamanho e a complexidade dos programas de computador modernoso tempo e o custo de desenvolvimento do programasconfiança de que os programas já concluídos funcionam corretamente
As linguagens funcionais oferecem um quadro particularmente ele-gante para abordar estes objetivos.
![Page 38: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/38.jpg)
12/29
A Crise do Software
Linguagens declarativas (incluindo linguagens funcionais):permitem que programas sejam escritos de forma clara, concisa, e com um altonível de abstração;suportam componentes de software reutilizáveis;incentivam o uso de verificação formal;permitem prototipagem rápida;fornecem poderosas ferramentas de resolução de problemas.
Estas características podem ser úteis na abordagem de dificuldadesencontradas no desenvolvimento de software:
o tamanho e a complexidade dos programas de computador modernoso tempo e o custo de desenvolvimento do programasconfiança de que os programas já concluídos funcionam corretamente
As linguagens funcionais oferecem um quadro particularmente ele-gante para abordar estes objetivos.
![Page 39: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/39.jpg)
12/29
A Crise do Software
Linguagens declarativas (incluindo linguagens funcionais):permitem que programas sejam escritos de forma clara, concisa, e com um altonível de abstração;suportam componentes de software reutilizáveis;incentivam o uso de verificação formal;permitem prototipagem rápida;fornecem poderosas ferramentas de resolução de problemas.
Estas características podem ser úteis na abordagem de dificuldadesencontradas no desenvolvimento de software:
o tamanho e a complexidade dos programas de computador modernoso tempo e o custo de desenvolvimento do programasconfiança de que os programas já concluídos funcionam corretamente
As linguagens funcionais oferecem um quadro particularmente ele-gante para abordar estes objetivos.
![Page 40: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/40.jpg)
12/29
A Crise do Software
Linguagens declarativas (incluindo linguagens funcionais):permitem que programas sejam escritos de forma clara, concisa, e com um altonível de abstração;suportam componentes de software reutilizáveis;incentivam o uso de verificação formal;permitem prototipagem rápida;fornecem poderosas ferramentas de resolução de problemas.
Estas características podem ser úteis na abordagem de dificuldadesencontradas no desenvolvimento de software:
o tamanho e a complexidade dos programas de computador modernoso tempo e o custo de desenvolvimento do programasconfiança de que os programas já concluídos funcionam corretamente
As linguagens funcionais oferecem um quadro particularmente ele-gante para abordar estes objetivos.
![Page 41: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/41.jpg)
12/29
A Crise do Software
Linguagens declarativas (incluindo linguagens funcionais):permitem que programas sejam escritos de forma clara, concisa, e com um altonível de abstração;suportam componentes de software reutilizáveis;incentivam o uso de verificação formal;permitem prototipagem rápida;fornecem poderosas ferramentas de resolução de problemas.
Estas características podem ser úteis na abordagem de dificuldadesencontradas no desenvolvimento de software:
o tamanho e a complexidade dos programas de computador modernoso tempo e o custo de desenvolvimento do programasconfiança de que os programas já concluídos funcionam corretamente
As linguagens funcionais oferecem um quadro particularmente ele-gante para abordar estes objetivos.
![Page 42: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/42.jpg)
12/29
A Crise do Software
Linguagens declarativas (incluindo linguagens funcionais):permitem que programas sejam escritos de forma clara, concisa, e com um altonível de abstração;suportam componentes de software reutilizáveis;incentivam o uso de verificação formal;permitem prototipagem rápida;fornecem poderosas ferramentas de resolução de problemas.
Estas características podem ser úteis na abordagem de dificuldadesencontradas no desenvolvimento de software:
o tamanho e a complexidade dos programas de computador modernoso tempo e o custo de desenvolvimento do programasconfiança de que os programas já concluídos funcionam corretamente
As linguagens funcionais oferecem um quadro particularmente ele-gante para abordar estes objetivos.
![Page 43: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/43.jpg)
12/29
A Crise do Software
Linguagens declarativas (incluindo linguagens funcionais):permitem que programas sejam escritos de forma clara, concisa, e com um altonível de abstração;suportam componentes de software reutilizáveis;incentivam o uso de verificação formal;permitem prototipagem rápida;fornecem poderosas ferramentas de resolução de problemas.
Estas características podem ser úteis na abordagem de dificuldadesencontradas no desenvolvimento de software:
o tamanho e a complexidade dos programas de computador modernoso tempo e o custo de desenvolvimento do programasconfiança de que os programas já concluídos funcionam corretamente
As linguagens funcionais oferecem um quadro particularmente ele-gante para abordar estes objetivos.
![Page 44: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/44.jpg)
12/29
A Crise do Software
Linguagens declarativas (incluindo linguagens funcionais):permitem que programas sejam escritos de forma clara, concisa, e com um altonível de abstração;suportam componentes de software reutilizáveis;incentivam o uso de verificação formal;permitem prototipagem rápida;fornecem poderosas ferramentas de resolução de problemas.
Estas características podem ser úteis na abordagem de dificuldadesencontradas no desenvolvimento de software:
o tamanho e a complexidade dos programas de computador modernoso tempo e o custo de desenvolvimento do programasconfiança de que os programas já concluídos funcionam corretamente
As linguagens funcionais oferecem um quadro particularmente ele-gante para abordar estes objetivos.
![Page 45: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/45.jpg)
12/29
A Crise do Software
Linguagens declarativas (incluindo linguagens funcionais):permitem que programas sejam escritos de forma clara, concisa, e com um altonível de abstração;suportam componentes de software reutilizáveis;incentivam o uso de verificação formal;permitem prototipagem rápida;fornecem poderosas ferramentas de resolução de problemas.
Estas características podem ser úteis na abordagem de dificuldadesencontradas no desenvolvimento de software:
o tamanho e a complexidade dos programas de computador modernoso tempo e o custo de desenvolvimento do programasconfiança de que os programas já concluídos funcionam corretamente
As linguagens funcionais oferecem um quadro particularmente ele-gante para abordar estes objetivos.
![Page 46: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/46.jpg)
12/29
A Crise do Software
Linguagens declarativas (incluindo linguagens funcionais):permitem que programas sejam escritos de forma clara, concisa, e com um altonível de abstração;suportam componentes de software reutilizáveis;incentivam o uso de verificação formal;permitem prototipagem rápida;fornecem poderosas ferramentas de resolução de problemas.
Estas características podem ser úteis na abordagem de dificuldadesencontradas no desenvolvimento de software:
o tamanho e a complexidade dos programas de computador modernoso tempo e o custo de desenvolvimento do programasconfiança de que os programas já concluídos funcionam corretamente
As linguagens funcionais oferecem um quadro particularmente ele-gante para abordar estes objetivos.
![Page 47: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/47.jpg)
13/29
Tópicos
1 Paradigmas de programação
2 Programação funcional
3 A crise do software
4 Algumas características de Haskell
5 Antecedentes históricos
6 Algumas empresas que usam Haskell
7 Curso online
![Page 48: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/48.jpg)
14/29
Algumas características de Haskell
Programas são concisosTipagem estáticaSistema de tipos poderosoTipos e funções recursivasFunções de ordem superiorLinguagem pura (declarativa)Avaliação lazyMaior facilidade de raciocínio sobre programas
![Page 49: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/49.jpg)
15/29
Tópicos
1 Paradigmas de programação
2 Programação funcional
3 A crise do software
4 Algumas características de Haskell
5 Antecedentes históricos
6 Algumas empresas que usam Haskell
7 Curso online
![Page 50: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/50.jpg)
16/29
Antecedentes históricos
Década de 1930:
Alonzo Church desenvolve o cálculo lambda, uma teoria de funções simples,mas poderosa.
![Page 51: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/51.jpg)
17/29
Antecedentes históricos (cont.)
Década de 1950:
John McCarthy desenvolve Lisp, a primeira linguagem funcional, comalgumas influências do cálculo lambda, mas mantendo as atribuições devariáveis.
![Page 52: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/52.jpg)
18/29
Antecedentes históricos (cont.)
Década de 1960:
Peter Landin desenvolve ISWIM, a primeira linguagem funcional pura,baseada fortemente no cálculo lambda, sem atribuições.
![Page 53: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/53.jpg)
19/29
Antecedentes históricos (cont.)
Década de 1970:
John Backus desenvolve FP, uma linguagem funcional que enfatiza funçõesde ordem superior e raciocínio sobre programas.
![Page 54: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/54.jpg)
20/29
Antecedentes históricos (cont.)
Década de 1970:
Robin Milner e outros desenvolvem ML, a primeira linguagem funcionalmoderna, que introduziu a inferência de tipos e tipos polimórficos.
![Page 55: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/55.jpg)
21/29
Antecedentes históricos (cont.)
Décadas de 1970 e 1980:
David Turner desenvolve uma série de linguagens funcionais com avaliaçãolazy, culminando com o sistema Miranda.
![Page 56: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/56.jpg)
22/29
Antecedentes históricos (cont.)
1987:
Um comitê internacional de pesquisadores inicia o desenvolvimento deHaskell, uma linguagem funcional lazy padrão.
![Page 57: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/57.jpg)
23/29
Antecedentes históricos (cont.)
2003:
O comitê publica o relatório Haskell 98, a definição de uma versão estávelda linguagem Haskell.
![Page 58: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/58.jpg)
24/29
Antecedentes históricos (cont.)
2009:
O comitê publica o relatório Haskell 2010, uma revisão da definição dalinguagem Haskell.
![Page 59: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/59.jpg)
25/29
Tópicos
1 Paradigmas de programação
2 Programação funcional
3 A crise do software
4 Algumas características de Haskell
5 Antecedentes históricos
6 Algumas empresas que usam Haskell
7 Curso online
![Page 60: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/60.jpg)
26/29
Quem usa Haskell?
Exemplos de empresas que usam Haskell:ABN AMRO análise de riscos financeirosAT&T automatização de processamento de formuláriosBank of America Merril Lynch transformação de dadosBump servidores baseados em HaskellFacebook manipulação da base de código PHPGoogle infra-estrutura interna de TIMITRE análise de protocolos de criptografiaNVIDIA ferramentas usadas internamenteQualcomm, Inc geração de interfaces de programação para LuaThe New York Times processamento de imagens
Para maiores detalhes visite a página Haskell na indústria emhttp://www.haskell.org/haskellwiki/Haskell_in_industry.
![Page 61: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/61.jpg)
27/29
Tópicos
1 Paradigmas de programação
2 Programação funcional
3 A crise do software
4 Algumas características de Haskell
5 Antecedentes históricos
6 Algumas empresas que usam Haskell
7 Curso online
![Page 62: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/62.jpg)
28/29
Curso online de Haskell
Functional Programming in HaskellUniversidade de GlasgowInício: 19 de setembro de 2016Duração: 6 semanasDedicação: 4 horas por semanahttps://www.futurelearn.com/courses/functional-programming-haskellQuem apresentar o certificado de participação no final do semestre poderáganhar 1 ponto extra!
![Page 63: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell](https://reader035.vdocuments.mx/reader035/viewer/2022081606/5be7328d09d3f204758c5824/html5/thumbnails/63.jpg)
29/29
Fim