SlideShare uma empresa Scribd logo
1 de 36
Baixar para ler offline
UNIVERSIDADE ESTADUAL DO SUDOESTE DA BAHIA
CURSO DE CIÊNCIA DA COMPUTAÇÃO
PROGRAMAÇÃO DECLARATIVA – 2016.2
Fábio M. Pereira
(fabio.mpereira@uesb.edu.br)
Roteiro
• Linguagens de Programação
• Funções Matemáticas e Programação
• O Que é Programação Funcional?
• Vantagens da Programação Funcional
• Desvantagens
• Programando por Funções
• Implementações
• Comandos Básicos no GHCi
Linguagens de Programação
• Um programa é uma sequência lógica de tarefas,
destinada à computadores
• Uma linguagem de programação é usada para escrever
programas:
– Diretamente em código de máquina
– Em uma linguagem de baixo nível
– Em uma linguagem de alto nível
• O compilador converte um programa em linguagem de
alto nível para linguagem de máquina
Linguagens de Programação
• Código de máquina:
• Baixo nível:
• Alto Nível:
00101011 – 2B
01101111 – 6F
ORG $400
MOVE.B Value1,D0
MOVE.B Value2,D1
ADD.B D0,D1
MOVE.B D1,Result
STOP #$2700
program Teste;
var Nome: String;
begin
write('Nome: ');
readln(nome);
writeln('Nome lido do teclado: ',nome);
readln;
end.
Funções Matemáticas
• Define um mapeamento de um domínio de valores para
uma “faixa” de valores
• Conjunto de pares ordenados que relaciona cada
elemento de um domínio com um elemento
correspondente em uma “faixa” (contradomínio)
• O valor de uma função não depende de conceitos como
ordem de execução
• Variáveis não mudam de valor
Representam Funções Matemáticas?
Definição de Função
• Dados dois conjuntos A e B não vazios, uma função de A
em B é uma relação que associa a cada elemento x  A,
um único elemento y  B
• Assim, uma função liga um elemento do domínio
(conjunto A de valores de entrada) com um segundo
conjunto, o contradomínio (conjunto B de valores de
saída) de tal forma que a cada elemento do domínio está
associado exatamente a um, e somente um, elemento do
contradomínio
• O conjunto dos elementos do contradomínio que são
relacionados pela f a algum x do domínio é o conjunto
imagem, denotado por Im(f)
Qual a Função?
f(x) = x2
Dom (f) = {-3, -2, -1, 0}
CD (f) = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
Im (f) = {0, 1, 4, 9}
Quais Diagramas Representam Uma
Função de A em B?
(a) (b)
(c) (d)
Funções Matemáticas e Programação
• Simplificando, uma função é uma regra para
mapeamento (ou associação) de membros de um
conjunto (o conjunto domínio) para outro
(contradomínio)
• Exemplo: a função “quadrado” deve mapear elementos
do conjunto de números inteiros para o conjunto de
números naturais
• A definição de uma função é composta de duas partes
– Assinatura: especifica o domínio e o contradomínio
– Regra de mapeamento: especifica o valor do contradomínio
associado com cada valor do domínio
Funções Matemáticas e Programação
• Exemplo
square : integer  natural (assinatura)
square(n)  n x n (regra de mapeamento)
 (é definida por)
n (parâmetro)
square(2) resulta no valor 4, onde “2” é o argumento
“n” é uma variável matemática, que é diferente de uma
variável de programação  o seu valor não muda
Funções Matemáticas e Programação
• Novas funções podem ser criadas pela combinação de
funções
– Composição de funções: F  G o H
• A aplicação de F é equivalente a aplicação de H e a aplicação de G ao
resultado
• Em Linguagens Imperativas a função é definida de forma
procedural
• Em Funções Matemáticas a função é definida de forma
aplicativa ou declarativa
– A regra de mapeamento é definida em termos de combinações
e aplicações de outras funções
Funções Matemáticas e Programação
• Muitas Funções Matemáticas são definidas
recursivamente
– A definição da função contém uma aplicação dela mesma
• Fatorial de um número
n!  if n=0 then 1 else n*(n-1)!
• Função de naturais para booleanos que determina se um
número é primo
primo(n)  if n=2 then true else p(n, n div 2)
p(n,i)  if (n mod i) = 0 then false
else if i=1 then true else p (n, i-1)
• Qual a função de naturais para booleanos que determina
se um número é par?
Resumindo, O Que É Programação
Funcional?
• C, Java, Pascal, Ada, ..., são linguagens imperativas
– Consiste de uma sequência de comandos que são executados
estritamente um após o outro
• Haskell é uma linguagem funcional
– Um programa funcional é uma única expressão, que é
executada pela avaliação da expressão
• Planilha eletrônica: o valor de cada célula é calculado em
função dos valores de outras células
• Foco em o que deverá ser computado, e não em como
deverá ser computado.
O Que? X Como?
• Em uma planilha eletrônica:
– Não especificamos a ordem na qual as células devem ser
calculadas: a planilha irá automaticamente computar as células
em uma ordem que respeite as suas dependências
– Não dizemos a planilha como alocar memória: ela nos
apresenta um plano aparentemente infinito de células
– Na maioria das vezes, especificamos o valor de uma célula
através de uma expressão em vez de usarmos uma sequência
de comandos
Vantagens da Programação Funcional
• Programas muito mais concisos que os seus equivalentes
em linguagem imperativa (2-10 vezes)
• Fácil entendimento: você é capaz de entender o
programa sem qualquer conhecimento prévio da
linguagem
• É uma linguagem fortemente tipada, evitando erros de
programação
• Sistema de tipos menos restritivo (polimorfismo): reuso
de código
• Funções de alta-ordem: abstração poderosa
• Gerenciamento interno de memória
Vantagens da Programação Funcional
qsort [] = []
qsort (x:xs) =
qsort elts_lt_x ++ [x] ++ qsort elts_greq_x
where
elts_lt_x = [y | y <- xs, y < x]
elts_greq_x = [y | y <- xs, y >= x]
qsort( a, lo, hi ) int a[], hi, lo;
{
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);
t = a[l];
a[l] = a[hi];
a[hi] = t;
qsort( a, lo, l-1 );
qsort( a, l+1, hi );
}
}
Desvantagens
• Programas escritos em linguagens imperativas, como C
por exemplo, são geralmente mais rápidos e usam menos
memória que programas em Haskell
– Em aplicações onde a performance é fundamental, uma
linguagem imperativa seria uma melhor escolha que Haskell
– C oferece maior controle sobre o modo exato como a
computação é realizada
Programando por Funções
areaCirculo r = pi*r^2
quadrado x = x * x
maior x y
| x >= y = x
| otherwise = y
Programando por Funções
fatorial 1 = 1
fatorial n = n * fatorial (n-1)
f x = 2 * x + 4
Implementações
• Hugs
– Exclusivamente um interpretador, implementa quase todo o
padrão Haskell 98 e algumas extensões
– Escrito em C, funciona em quase todas as plataformas
– Possui uma biblioteca gráfica
– Último release: maio/2006 (sem manutenção)
– https://www.haskell.org/hugs/
Implementações
• GHC
– É tanto um interpretador como um compilador
– O ambiente interativo é mais lento que Hugs, mas permite
definição de funções no ambiente (em Hugs deve-se colocar em
um arquivo)
– Implementa o Haskell 2010
– Bom suporte a interface com outras linguagens
– Possui interface gráfica
– Último release: dezembro/2014
– https://www.haskell.org/downloads
Implementações
• NHC
– É apenas um compilador
– Produz executável menor e mais rápido que GHC98
– Dá suporte ao Haskell 98 e algumas extensões
– Sem manutenção
• UHC
– Implementação da Utrecht University
– Dá suporte ao Haskell 98 e algumas extensões
• JHC
– Compilador experimental com o objetivo de testar novos
métodos de otimização
Haskell GUIs
• Haskell possui pelo menos quatro kits de ferramentas
para programação de interface gráfica:
– wxHaskell – fornece uma interface Haskell para o
kit de ferramentas multi-plataformas wxWidgets
com suporte a Windows, OS X, e Gtk+ no
GNU/Linux, dentre outros
– Gtk2Hs – fornece uma interface Haskell para a biblioteca GTK+
– hoc – fornece uma ponte Haskell para Objective-C que permite
a usuários acessarem a biblioteca Cocoa no MacOS X
– qtHaskell – fornece um conjunto de pontes Haskell para a Qt
Widget Library da Nokia
Comandos Básicos no GHCi
• Ao executar o GHCi, uma sessão é iniciada
• O sistema carrega funções pré-definidas (Prelude.hs) e
passa a esperar comandos:
Comandos Básicos no GHCi
• Exemplo de Interação, digitando expressões:
Alguns Comandos Importantes
• :? imprime a lista de todos os comandos
• :q abandona o interpretador
• :load carrega definições a partir de um arquivo
• :e chama o editor
• :e exemplo1.hs editar o arquivo exemplo1.hs
• :l exemplo1.hs carregar o arquivo exemplo1.hs
• :a exemplo2.hs carregar o arquivo exemplo2.hs
• :r recarrega um arquivo modificado
• :m + nomeModulo carrega módulo (biblioteca) para a
memória
• :m – nomeModulo remove módulo da memória
• :! comando executar um comando do sistema operacional;
• :set visualiza configurações do GHCi (:s +t)
Operações Aritméticas
• Soma (+), subtração (-), multiplicação (*), divisão (/),
exponenciação (^) e raiz quadrada (sqrt)
• Agora tente calcular 2^5000 (irá funcionar?)
Operações Aritméticas
UNIVERSIDADE ESTADUAL DO SUDOESTE DA BAHIA
CURSO DE CIÊNCIA DA COMPUTAÇÃO
PROGRAMAÇÃO DECLARATIVA – 2016.2
Fábio M. Pereira
(fabio.mpereira@uesb.edu.br)

Mais conteúdo relacionado

Mais procurados

A Linguagem Lua e suas Aplicações em Jogos
A Linguagem Lua e suas Aplicações em JogosA Linguagem Lua e suas Aplicações em Jogos
A Linguagem Lua e suas Aplicações em Jogoselliando dias
 
Apresentação sobre a linguagem lua
Apresentação sobre a linguagem luaApresentação sobre a linguagem lua
Apresentação sobre a linguagem luaRafael Sanches
 
Introdução a programação
Introdução a programaçãoIntrodução a programação
Introdução a programaçãoGustavo Nazário
 
A Linguagem Lua - Uma abordagem inicial
A Linguagem Lua - Uma abordagem inicialA Linguagem Lua - Uma abordagem inicial
A Linguagem Lua - Uma abordagem inicialFlávio Schuindt
 
Desmistificando Built-in Functions, Lambda e List Comprehension...
Desmistificando Built-in Functions, Lambda e List Comprehension...Desmistificando Built-in Functions, Lambda e List Comprehension...
Desmistificando Built-in Functions, Lambda e List Comprehension...Matheus Pereira
 
Criando Jogos 2D com Lua + Corona SDK
Criando Jogos 2D com Lua + Corona SDKCriando Jogos 2D com Lua + Corona SDK
Criando Jogos 2D com Lua + Corona SDKLeonardo Dalmina
 
Linguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo LuaLinguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo LuaSérgio Souza Costa
 
Aula 01 práticaalgoritmo laboratorio
Aula 01 práticaalgoritmo laboratorioAula 01 práticaalgoritmo laboratorio
Aula 01 práticaalgoritmo laboratorioIsrael S Junior
 
Introdução Programação Funcional
Introdução Programação FuncionalIntrodução Programação Funcional
Introdução Programação FuncionalNatan Mai
 
SciLab -Tutorial
SciLab -TutorialSciLab -Tutorial
SciLab -Tutorialblogmaxima
 
Python Funcional
Python FuncionalPython Funcional
Python Funcionalpugpe
 
Programação funcional
Programação funcionalProgramação funcional
Programação funcionalNatan Mai
 
Sessao 5 Redundância e introdução à codificação de fonte
Sessao 5 Redundância e introdução à codificação de fonteSessao 5 Redundância e introdução à codificação de fonte
Sessao 5 Redundância e introdução à codificação de fontePedro De Almeida
 
Python - Guia de bolso
Python - Guia de bolsoPython - Guia de bolso
Python - Guia de bolsoJean Lopes
 

Mais procurados (20)

A Linguagem Lua e suas Aplicações em Jogos
A Linguagem Lua e suas Aplicações em JogosA Linguagem Lua e suas Aplicações em Jogos
A Linguagem Lua e suas Aplicações em Jogos
 
Apresentação sobre a linguagem lua
Apresentação sobre a linguagem luaApresentação sobre a linguagem lua
Apresentação sobre a linguagem lua
 
Linguagem R
Linguagem RLinguagem R
Linguagem R
 
Linguagem lua
Linguagem luaLinguagem lua
Linguagem lua
 
Introdução a programação
Introdução a programaçãoIntrodução a programação
Introdução a programação
 
Apresentação Lua
Apresentação LuaApresentação Lua
Apresentação Lua
 
A Linguagem Lua - Uma abordagem inicial
A Linguagem Lua - Uma abordagem inicialA Linguagem Lua - Uma abordagem inicial
A Linguagem Lua - Uma abordagem inicial
 
Desmistificando Built-in Functions, Lambda e List Comprehension...
Desmistificando Built-in Functions, Lambda e List Comprehension...Desmistificando Built-in Functions, Lambda e List Comprehension...
Desmistificando Built-in Functions, Lambda e List Comprehension...
 
Criando Jogos 2D com Lua + Corona SDK
Criando Jogos 2D com Lua + Corona SDKCriando Jogos 2D com Lua + Corona SDK
Criando Jogos 2D com Lua + Corona SDK
 
Linguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo LuaLinguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo Lua
 
Apostila C ANSI
Apostila C ANSIApostila C ANSI
Apostila C ANSI
 
Linguagem R
Linguagem RLinguagem R
Linguagem R
 
Aula 01 práticaalgoritmo laboratorio
Aula 01 práticaalgoritmo laboratorioAula 01 práticaalgoritmo laboratorio
Aula 01 práticaalgoritmo laboratorio
 
Introdução Programação Funcional
Introdução Programação FuncionalIntrodução Programação Funcional
Introdução Programação Funcional
 
SciLab -Tutorial
SciLab -TutorialSciLab -Tutorial
SciLab -Tutorial
 
Python Funcional
Python FuncionalPython Funcional
Python Funcional
 
O Tipo e o Tempo
O Tipo e o TempoO Tipo e o Tempo
O Tipo e o Tempo
 
Programação funcional
Programação funcionalProgramação funcional
Programação funcional
 
Sessao 5 Redundância e introdução à codificação de fonte
Sessao 5 Redundância e introdução à codificação de fonteSessao 5 Redundância e introdução à codificação de fonte
Sessao 5 Redundância e introdução à codificação de fonte
 
Python - Guia de bolso
Python - Guia de bolsoPython - Guia de bolso
Python - Guia de bolso
 

Destaque

04 - Gerenciamento de Threads - II
04 -  Gerenciamento de Threads - II04 -  Gerenciamento de Threads - II
04 - Gerenciamento de Threads - IIFabio Moura Pereira
 
Desenvolvimento de Sistemas Web - HTML5 - Introdução
Desenvolvimento de Sistemas Web - HTML5 - IntroduçãoDesenvolvimento de Sistemas Web - HTML5 - Introdução
Desenvolvimento de Sistemas Web - HTML5 - IntroduçãoFabio Moura Pereira
 
Programação Concorrente - Gerenciamento de Threads - Parte II
Programação Concorrente - Gerenciamento de Threads - Parte IIProgramação Concorrente - Gerenciamento de Threads - Parte II
Programação Concorrente - Gerenciamento de Threads - Parte IIFabio Moura Pereira
 
05 - Sincronização de Threads - I
05 - Sincronização de Threads - I05 - Sincronização de Threads - I
05 - Sincronização de Threads - IFabio Moura Pereira
 
Aula de Desenvolvimento de Sistemas Web - CSS3
Aula de Desenvolvimento de Sistemas Web - CSS3Aula de Desenvolvimento de Sistemas Web - CSS3
Aula de Desenvolvimento de Sistemas Web - CSS3Fabio Moura Pereira
 
Curso de Desenvolvimento de Sistemas Web - (X)HTML
Curso de Desenvolvimento de Sistemas Web - (X)HTMLCurso de Desenvolvimento de Sistemas Web - (X)HTML
Curso de Desenvolvimento de Sistemas Web - (X)HTMLFabio Moura Pereira
 
Aula Interface Gráfica do Usuário
Aula Interface Gráfica do UsuárioAula Interface Gráfica do Usuário
Aula Interface Gráfica do UsuárioFabio Moura Pereira
 
Desenvolvimento de Sistemas Web - Conceitos Básicos
Desenvolvimento de Sistemas Web - Conceitos BásicosDesenvolvimento de Sistemas Web - Conceitos Básicos
Desenvolvimento de Sistemas Web - Conceitos BásicosFabio Moura Pereira
 
Aula de Prolog 07 - Estruturas de Dados
Aula de Prolog 07 - Estruturas de DadosAula de Prolog 07 - Estruturas de Dados
Aula de Prolog 07 - Estruturas de DadosFabio Moura Pereira
 
Aula de Prolog 08 - Unificação
Aula de Prolog 08 - UnificaçãoAula de Prolog 08 - Unificação
Aula de Prolog 08 - UnificaçãoFabio Moura Pereira
 

Destaque (20)

04 - Gerenciamento de Threads - II
04 -  Gerenciamento de Threads - II04 -  Gerenciamento de Threads - II
04 - Gerenciamento de Threads - II
 
Aula Prolog - 05
Aula Prolog - 05Aula Prolog - 05
Aula Prolog - 05
 
Desenvolvimento de Sistemas Web - HTML5 - Introdução
Desenvolvimento de Sistemas Web - HTML5 - IntroduçãoDesenvolvimento de Sistemas Web - HTML5 - Introdução
Desenvolvimento de Sistemas Web - HTML5 - Introdução
 
Programação Concorrente - Gerenciamento de Threads - Parte II
Programação Concorrente - Gerenciamento de Threads - Parte IIProgramação Concorrente - Gerenciamento de Threads - Parte II
Programação Concorrente - Gerenciamento de Threads - Parte II
 
05 - Sincronização de Threads - I
05 - Sincronização de Threads - I05 - Sincronização de Threads - I
05 - Sincronização de Threads - I
 
Aula de Desenvolvimento de Sistemas Web - CSS3
Aula de Desenvolvimento de Sistemas Web - CSS3Aula de Desenvolvimento de Sistemas Web - CSS3
Aula de Desenvolvimento de Sistemas Web - CSS3
 
Aula 05 - Java Script Básico
Aula 05 -  Java Script BásicoAula 05 -  Java Script Básico
Aula 05 - Java Script Básico
 
Curso de Desenvolvimento de Sistemas Web - (X)HTML
Curso de Desenvolvimento de Sistemas Web - (X)HTMLCurso de Desenvolvimento de Sistemas Web - (X)HTML
Curso de Desenvolvimento de Sistemas Web - (X)HTML
 
Aula Prolog 03
Aula Prolog 03Aula Prolog 03
Aula Prolog 03
 
Aula Persistência 01 (Java)
Aula Persistência 01 (Java)Aula Persistência 01 (Java)
Aula Persistência 01 (Java)
 
Aula Tratamento de Exceções
Aula Tratamento de ExceçõesAula Tratamento de Exceções
Aula Tratamento de Exceções
 
Aula Interface Gráfica do Usuário
Aula Interface Gráfica do UsuárioAula Interface Gráfica do Usuário
Aula Interface Gráfica do Usuário
 
Desenvolvimento de Sistemas Web - Conceitos Básicos
Desenvolvimento de Sistemas Web - Conceitos BásicosDesenvolvimento de Sistemas Web - Conceitos Básicos
Desenvolvimento de Sistemas Web - Conceitos Básicos
 
Aula Java Swing
Aula Java SwingAula Java Swing
Aula Java Swing
 
Curso de PHP - Objetos
Curso de PHP - ObjetosCurso de PHP - Objetos
Curso de PHP - Objetos
 
Aula de Prolog 07 - Estruturas de Dados
Aula de Prolog 07 - Estruturas de DadosAula de Prolog 07 - Estruturas de Dados
Aula de Prolog 07 - Estruturas de Dados
 
Aula de Prolog 08 - Unificação
Aula de Prolog 08 - UnificaçãoAula de Prolog 08 - Unificação
Aula de Prolog 08 - Unificação
 
Aula Prolog 02
Aula Prolog 02Aula Prolog 02
Aula Prolog 02
 
Aula de Prolog 06 - Recursão
Aula de Prolog 06 - RecursãoAula de Prolog 06 - Recursão
Aula de Prolog 06 - Recursão
 
Prolog 04 - Regras
Prolog 04 - RegrasProlog 04 - Regras
Prolog 04 - Regras
 

Semelhante a Haskell - Introdução

Lógica de programação pascal
Lógica de programação   pascalLógica de programação   pascal
Lógica de programação pascalJocelma Rios
 
Mini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e DistribuídaMini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e DistribuídaDeivid Martins
 
4 introdução ao paradigma funcional
4 introdução ao paradigma funcional4 introdução ao paradigma funcional
4 introdução ao paradigma funcionalPéricles Miranda
 
Minicurso - funcional (CTI/2019)
Minicurso - funcional (CTI/2019)Minicurso - funcional (CTI/2019)
Minicurso - funcional (CTI/2019)Pedro Alcantara
 
A linguagem de programação Erlang
A linguagem de programação ErlangA linguagem de programação Erlang
A linguagem de programação Erlangelliando dias
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao cprofwtelles
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem CVê Rodrigues
 
Algoritomos aula 3 rafael
Algoritomos aula 3 rafaelAlgoritomos aula 3 rafael
Algoritomos aula 3 rafaelhugodrocha
 
Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2Ismar Silveira
 
Introdução a linguagem c karen lowhany
Introdução a linguagem c   karen lowhanyIntrodução a linguagem c   karen lowhany
Introdução a linguagem c karen lowhanyKaren Costa
 
LIA - Linguagem Interpretada de Algoritmos
LIA - Linguagem Interpretada de AlgoritmosLIA - Linguagem Interpretada de Algoritmos
LIA - Linguagem Interpretada de AlgoritmosRafael Martins
 
Escrevendo modulos python com rust
Escrevendo modulos python com rustEscrevendo modulos python com rust
Escrevendo modulos python com rustBruno Rocha
 

Semelhante a Haskell - Introdução (20)

Lógica de programação pascal
Lógica de programação   pascalLógica de programação   pascal
Lógica de programação pascal
 
Mini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e DistribuídaMini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e Distribuída
 
Functional Programming - Scala
Functional Programming - ScalaFunctional Programming - Scala
Functional Programming - Scala
 
4 introdução ao paradigma funcional
4 introdução ao paradigma funcional4 introdução ao paradigma funcional
4 introdução ao paradigma funcional
 
Funções e procedimentos
Funções e procedimentosFunções e procedimentos
Funções e procedimentos
 
Minicurso - funcional (CTI/2019)
Minicurso - funcional (CTI/2019)Minicurso - funcional (CTI/2019)
Minicurso - funcional (CTI/2019)
 
A linguagem de programação Erlang
A linguagem de programação ErlangA linguagem de programação Erlang
A linguagem de programação Erlang
 
Curso de Linguagem C
Curso de Linguagem CCurso de Linguagem C
Curso de Linguagem C
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao c
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao c
 
Paradigma funcional
Paradigma funcionalParadigma funcional
Paradigma funcional
 
Pi1415 tudo
Pi1415 tudoPi1415 tudo
Pi1415 tudo
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem C
 
Algoritomos aula 3 rafael
Algoritomos aula 3 rafaelAlgoritomos aula 3 rafael
Algoritomos aula 3 rafael
 
Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2
 
Ud2
Ud2Ud2
Ud2
 
Introdução a linguagem c karen lowhany
Introdução a linguagem c   karen lowhanyIntrodução a linguagem c   karen lowhany
Introdução a linguagem c karen lowhany
 
Aula python
Aula pythonAula python
Aula python
 
LIA - Linguagem Interpretada de Algoritmos
LIA - Linguagem Interpretada de AlgoritmosLIA - Linguagem Interpretada de Algoritmos
LIA - Linguagem Interpretada de Algoritmos
 
Escrevendo modulos python com rust
Escrevendo modulos python com rustEscrevendo modulos python com rust
Escrevendo modulos python com rust
 

Mais de Fabio Moura Pereira

Programação Concorrente - Gerenciamento de Threads - Parte I
Programação Concorrente - Gerenciamento de Threads - Parte IProgramação Concorrente - Gerenciamento de Threads - Parte I
Programação Concorrente - Gerenciamento de Threads - Parte IFabio Moura Pereira
 
Programação Concorrente - Objetos e Concorrência
Programação Concorrente - Objetos e ConcorrênciaProgramação Concorrente - Objetos e Concorrência
Programação Concorrente - Objetos e ConcorrênciaFabio Moura Pereira
 
Programação Concorrente - Introdução
Programação Concorrente - IntroduçãoProgramação Concorrente - Introdução
Programação Concorrente - IntroduçãoFabio Moura Pereira
 
Aula - Interfaces e Estilos de Interação
Aula - Interfaces e Estilos de InteraçãoAula - Interfaces e Estilos de Interação
Aula - Interfaces e Estilos de InteraçãoFabio Moura Pereira
 
Aula Desenvolvimento de Jogos - Game Engine (Motor de Jogos)
Aula Desenvolvimento de Jogos - Game Engine (Motor de Jogos)Aula Desenvolvimento de Jogos - Game Engine (Motor de Jogos)
Aula Desenvolvimento de Jogos - Game Engine (Motor de Jogos)Fabio Moura Pereira
 
Desenvolvimento de Jogos - Game Design
Desenvolvimento de Jogos - Game DesignDesenvolvimento de Jogos - Game Design
Desenvolvimento de Jogos - Game DesignFabio Moura Pereira
 
Desenvolvimento de Jogos - Mercado Parte 2
Desenvolvimento de Jogos - Mercado Parte 2Desenvolvimento de Jogos - Mercado Parte 2
Desenvolvimento de Jogos - Mercado Parte 2Fabio Moura Pereira
 
Desenvolvimento de Jogos - Mercado Parte 1
Desenvolvimento de Jogos - Mercado Parte 1Desenvolvimento de Jogos - Mercado Parte 1
Desenvolvimento de Jogos - Mercado Parte 1Fabio Moura Pereira
 

Mais de Fabio Moura Pereira (15)

Aula Prolog 09 - Listas
Aula Prolog 09 - ListasAula Prolog 09 - Listas
Aula Prolog 09 - Listas
 
Aula Prolog 01
Aula Prolog 01Aula Prolog 01
Aula Prolog 01
 
Programação Concorrente - Gerenciamento de Threads - Parte I
Programação Concorrente - Gerenciamento de Threads - Parte IProgramação Concorrente - Gerenciamento de Threads - Parte I
Programação Concorrente - Gerenciamento de Threads - Parte I
 
Programação Concorrente - Objetos e Concorrência
Programação Concorrente - Objetos e ConcorrênciaProgramação Concorrente - Objetos e Concorrência
Programação Concorrente - Objetos e Concorrência
 
Programação Concorrente - Introdução
Programação Concorrente - IntroduçãoProgramação Concorrente - Introdução
Programação Concorrente - Introdução
 
Aula - Interfaces e Estilos de Interação
Aula - Interfaces e Estilos de InteraçãoAula - Interfaces e Estilos de Interação
Aula - Interfaces e Estilos de Interação
 
Aula Desenvolvimento de Jogos - Game Engine (Motor de Jogos)
Aula Desenvolvimento de Jogos - Game Engine (Motor de Jogos)Aula Desenvolvimento de Jogos - Game Engine (Motor de Jogos)
Aula Desenvolvimento de Jogos - Game Engine (Motor de Jogos)
 
Padrões de Projeto de Software
Padrões de Projeto de SoftwarePadrões de Projeto de Software
Padrões de Projeto de Software
 
Curso de PHP - Arrays
Curso de PHP - ArraysCurso de PHP - Arrays
Curso de PHP - Arrays
 
Desenvolvimento de Jogos - Game Design
Desenvolvimento de Jogos - Game DesignDesenvolvimento de Jogos - Game Design
Desenvolvimento de Jogos - Game Design
 
Desenvolvimento de Jogos - Mercado Parte 2
Desenvolvimento de Jogos - Mercado Parte 2Desenvolvimento de Jogos - Mercado Parte 2
Desenvolvimento de Jogos - Mercado Parte 2
 
Desenvolvimento de Jogos - Mercado Parte 1
Desenvolvimento de Jogos - Mercado Parte 1Desenvolvimento de Jogos - Mercado Parte 1
Desenvolvimento de Jogos - Mercado Parte 1
 
PHP - Funções
PHP - FunçõesPHP - Funções
PHP - Funções
 
PHP - Introdução
PHP - IntroduçãoPHP - Introdução
PHP - Introdução
 
PHP - Strings
PHP - StringsPHP - Strings
PHP - Strings
 

Último

M0 Atendimento – Definição, Importância .pptx
M0 Atendimento – Definição, Importância .pptxM0 Atendimento – Definição, Importância .pptx
M0 Atendimento – Definição, Importância .pptxJustinoTeixeira1
 
6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptxJssicaCassiano2
 
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.docGUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.docPauloHenriqueGarciaM
 
classe gramatical Substantivo apresentação..pptx
classe gramatical Substantivo apresentação..pptxclasse gramatical Substantivo apresentação..pptx
classe gramatical Substantivo apresentação..pptxLuciana Luciana
 
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptxResponde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptxAntonioVieira539017
 
LENDA DA MANDIOCA - leitura e interpretação
LENDA DA MANDIOCA - leitura e interpretaçãoLENDA DA MANDIOCA - leitura e interpretação
LENDA DA MANDIOCA - leitura e interpretaçãoLidianePaulaValezi
 
Historia de Portugal - Quarto Ano - 2024
Historia de Portugal - Quarto Ano - 2024Historia de Portugal - Quarto Ano - 2024
Historia de Portugal - Quarto Ano - 2024Cabiamar
 
Aula 1 - Psicologia Cognitiva, aula .ppt
Aula 1 - Psicologia Cognitiva, aula .pptAula 1 - Psicologia Cognitiva, aula .ppt
Aula 1 - Psicologia Cognitiva, aula .pptNathaliaFreitas32
 
Sistema de Bibliotecas UCS - Cantos do fim do século
Sistema de Bibliotecas UCS  - Cantos do fim do séculoSistema de Bibliotecas UCS  - Cantos do fim do século
Sistema de Bibliotecas UCS - Cantos do fim do séculoBiblioteca UCS
 
Plano de aula Nova Escola períodos simples e composto parte 1.pptx
Plano de aula Nova Escola períodos simples e composto parte 1.pptxPlano de aula Nova Escola períodos simples e composto parte 1.pptx
Plano de aula Nova Escola períodos simples e composto parte 1.pptxPaulaYaraDaasPedro
 
Renascimento Cultural na Idade Moderna PDF
Renascimento Cultural na Idade Moderna PDFRenascimento Cultural na Idade Moderna PDF
Renascimento Cultural na Idade Moderna PDFRafaelaMartins72608
 
APRESENTAÇÃO - BEHAVIORISMO - TEORIA DA APRENDIZAGEM.pdf
APRESENTAÇÃO - BEHAVIORISMO - TEORIA DA APRENDIZAGEM.pdfAPRESENTAÇÃO - BEHAVIORISMO - TEORIA DA APRENDIZAGEM.pdf
APRESENTAÇÃO - BEHAVIORISMO - TEORIA DA APRENDIZAGEM.pdfgerathird
 
Texto dramático com Estrutura e exemplos.ppt
Texto dramático com Estrutura e exemplos.pptTexto dramático com Estrutura e exemplos.ppt
Texto dramático com Estrutura e exemplos.pptjricardo76
 
Cópia de AULA 2- ENSINO FUNDAMENTAL ANOS INICIAIS - LÍNGUA PORTUGUESA.pptx
Cópia de AULA 2- ENSINO FUNDAMENTAL ANOS INICIAIS - LÍNGUA PORTUGUESA.pptxCópia de AULA 2- ENSINO FUNDAMENTAL ANOS INICIAIS - LÍNGUA PORTUGUESA.pptx
Cópia de AULA 2- ENSINO FUNDAMENTAL ANOS INICIAIS - LÍNGUA PORTUGUESA.pptxSilvana Silva
 
Camadas da terra -Litosfera conteúdo 6º ano
Camadas da terra -Litosfera  conteúdo 6º anoCamadas da terra -Litosfera  conteúdo 6º ano
Camadas da terra -Litosfera conteúdo 6º anoRachel Facundo
 
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...MariaCristinaSouzaLe1
 
19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdfmarlene54545
 
A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...
A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...
A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...DirceuNascimento5
 
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptxMonoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptxFlviaGomes64
 
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxSlides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxLuizHenriquedeAlmeid6
 

Último (20)

M0 Atendimento – Definição, Importância .pptx
M0 Atendimento – Definição, Importância .pptxM0 Atendimento – Definição, Importância .pptx
M0 Atendimento – Definição, Importância .pptx
 
6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx
 
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.docGUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
 
classe gramatical Substantivo apresentação..pptx
classe gramatical Substantivo apresentação..pptxclasse gramatical Substantivo apresentação..pptx
classe gramatical Substantivo apresentação..pptx
 
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptxResponde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
 
LENDA DA MANDIOCA - leitura e interpretação
LENDA DA MANDIOCA - leitura e interpretaçãoLENDA DA MANDIOCA - leitura e interpretação
LENDA DA MANDIOCA - leitura e interpretação
 
Historia de Portugal - Quarto Ano - 2024
Historia de Portugal - Quarto Ano - 2024Historia de Portugal - Quarto Ano - 2024
Historia de Portugal - Quarto Ano - 2024
 
Aula 1 - Psicologia Cognitiva, aula .ppt
Aula 1 - Psicologia Cognitiva, aula .pptAula 1 - Psicologia Cognitiva, aula .ppt
Aula 1 - Psicologia Cognitiva, aula .ppt
 
Sistema de Bibliotecas UCS - Cantos do fim do século
Sistema de Bibliotecas UCS  - Cantos do fim do séculoSistema de Bibliotecas UCS  - Cantos do fim do século
Sistema de Bibliotecas UCS - Cantos do fim do século
 
Plano de aula Nova Escola períodos simples e composto parte 1.pptx
Plano de aula Nova Escola períodos simples e composto parte 1.pptxPlano de aula Nova Escola períodos simples e composto parte 1.pptx
Plano de aula Nova Escola períodos simples e composto parte 1.pptx
 
Renascimento Cultural na Idade Moderna PDF
Renascimento Cultural na Idade Moderna PDFRenascimento Cultural na Idade Moderna PDF
Renascimento Cultural na Idade Moderna PDF
 
APRESENTAÇÃO - BEHAVIORISMO - TEORIA DA APRENDIZAGEM.pdf
APRESENTAÇÃO - BEHAVIORISMO - TEORIA DA APRENDIZAGEM.pdfAPRESENTAÇÃO - BEHAVIORISMO - TEORIA DA APRENDIZAGEM.pdf
APRESENTAÇÃO - BEHAVIORISMO - TEORIA DA APRENDIZAGEM.pdf
 
Texto dramático com Estrutura e exemplos.ppt
Texto dramático com Estrutura e exemplos.pptTexto dramático com Estrutura e exemplos.ppt
Texto dramático com Estrutura e exemplos.ppt
 
Cópia de AULA 2- ENSINO FUNDAMENTAL ANOS INICIAIS - LÍNGUA PORTUGUESA.pptx
Cópia de AULA 2- ENSINO FUNDAMENTAL ANOS INICIAIS - LÍNGUA PORTUGUESA.pptxCópia de AULA 2- ENSINO FUNDAMENTAL ANOS INICIAIS - LÍNGUA PORTUGUESA.pptx
Cópia de AULA 2- ENSINO FUNDAMENTAL ANOS INICIAIS - LÍNGUA PORTUGUESA.pptx
 
Camadas da terra -Litosfera conteúdo 6º ano
Camadas da terra -Litosfera  conteúdo 6º anoCamadas da terra -Litosfera  conteúdo 6º ano
Camadas da terra -Litosfera conteúdo 6º ano
 
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
 
19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf
 
A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...
A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...
A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...
 
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptxMonoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
 
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxSlides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
 

Haskell - Introdução

  • 1. UNIVERSIDADE ESTADUAL DO SUDOESTE DA BAHIA CURSO DE CIÊNCIA DA COMPUTAÇÃO PROGRAMAÇÃO DECLARATIVA – 2016.2 Fábio M. Pereira (fabio.mpereira@uesb.edu.br)
  • 2. Roteiro • Linguagens de Programação • Funções Matemáticas e Programação • O Que é Programação Funcional? • Vantagens da Programação Funcional • Desvantagens • Programando por Funções • Implementações • Comandos Básicos no GHCi
  • 3.
  • 4. Linguagens de Programação • Um programa é uma sequência lógica de tarefas, destinada à computadores • Uma linguagem de programação é usada para escrever programas: – Diretamente em código de máquina – Em uma linguagem de baixo nível – Em uma linguagem de alto nível • O compilador converte um programa em linguagem de alto nível para linguagem de máquina
  • 5. Linguagens de Programação • Código de máquina: • Baixo nível: • Alto Nível: 00101011 – 2B 01101111 – 6F ORG $400 MOVE.B Value1,D0 MOVE.B Value2,D1 ADD.B D0,D1 MOVE.B D1,Result STOP #$2700 program Teste; var Nome: String; begin write('Nome: '); readln(nome); writeln('Nome lido do teclado: ',nome); readln; end.
  • 6.
  • 7. Funções Matemáticas • Define um mapeamento de um domínio de valores para uma “faixa” de valores • Conjunto de pares ordenados que relaciona cada elemento de um domínio com um elemento correspondente em uma “faixa” (contradomínio) • O valor de uma função não depende de conceitos como ordem de execução • Variáveis não mudam de valor
  • 9. Definição de Função • Dados dois conjuntos A e B não vazios, uma função de A em B é uma relação que associa a cada elemento x  A, um único elemento y  B • Assim, uma função liga um elemento do domínio (conjunto A de valores de entrada) com um segundo conjunto, o contradomínio (conjunto B de valores de saída) de tal forma que a cada elemento do domínio está associado exatamente a um, e somente um, elemento do contradomínio • O conjunto dos elementos do contradomínio que são relacionados pela f a algum x do domínio é o conjunto imagem, denotado por Im(f)
  • 10. Qual a Função? f(x) = x2 Dom (f) = {-3, -2, -1, 0} CD (f) = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} Im (f) = {0, 1, 4, 9}
  • 11. Quais Diagramas Representam Uma Função de A em B? (a) (b) (c) (d)
  • 12. Funções Matemáticas e Programação • Simplificando, uma função é uma regra para mapeamento (ou associação) de membros de um conjunto (o conjunto domínio) para outro (contradomínio) • Exemplo: a função “quadrado” deve mapear elementos do conjunto de números inteiros para o conjunto de números naturais • A definição de uma função é composta de duas partes – Assinatura: especifica o domínio e o contradomínio – Regra de mapeamento: especifica o valor do contradomínio associado com cada valor do domínio
  • 13. Funções Matemáticas e Programação • Exemplo square : integer  natural (assinatura) square(n)  n x n (regra de mapeamento)  (é definida por) n (parâmetro) square(2) resulta no valor 4, onde “2” é o argumento “n” é uma variável matemática, que é diferente de uma variável de programação  o seu valor não muda
  • 14. Funções Matemáticas e Programação • Novas funções podem ser criadas pela combinação de funções – Composição de funções: F  G o H • A aplicação de F é equivalente a aplicação de H e a aplicação de G ao resultado • Em Linguagens Imperativas a função é definida de forma procedural • Em Funções Matemáticas a função é definida de forma aplicativa ou declarativa – A regra de mapeamento é definida em termos de combinações e aplicações de outras funções
  • 15. Funções Matemáticas e Programação • Muitas Funções Matemáticas são definidas recursivamente – A definição da função contém uma aplicação dela mesma • Fatorial de um número n!  if n=0 then 1 else n*(n-1)! • Função de naturais para booleanos que determina se um número é primo primo(n)  if n=2 then true else p(n, n div 2) p(n,i)  if (n mod i) = 0 then false else if i=1 then true else p (n, i-1) • Qual a função de naturais para booleanos que determina se um número é par?
  • 16. Resumindo, O Que É Programação Funcional? • C, Java, Pascal, Ada, ..., são linguagens imperativas – Consiste de uma sequência de comandos que são executados estritamente um após o outro • Haskell é uma linguagem funcional – Um programa funcional é uma única expressão, que é executada pela avaliação da expressão • Planilha eletrônica: o valor de cada célula é calculado em função dos valores de outras células • Foco em o que deverá ser computado, e não em como deverá ser computado.
  • 17. O Que? X Como? • Em uma planilha eletrônica: – Não especificamos a ordem na qual as células devem ser calculadas: a planilha irá automaticamente computar as células em uma ordem que respeite as suas dependências – Não dizemos a planilha como alocar memória: ela nos apresenta um plano aparentemente infinito de células – Na maioria das vezes, especificamos o valor de uma célula através de uma expressão em vez de usarmos uma sequência de comandos
  • 18.
  • 19. Vantagens da Programação Funcional • Programas muito mais concisos que os seus equivalentes em linguagem imperativa (2-10 vezes) • Fácil entendimento: você é capaz de entender o programa sem qualquer conhecimento prévio da linguagem • É uma linguagem fortemente tipada, evitando erros de programação • Sistema de tipos menos restritivo (polimorfismo): reuso de código • Funções de alta-ordem: abstração poderosa • Gerenciamento interno de memória
  • 20. Vantagens da Programação Funcional qsort [] = [] qsort (x:xs) = qsort elts_lt_x ++ [x] ++ qsort elts_greq_x where elts_lt_x = [y | y <- xs, y < x] elts_greq_x = [y | y <- xs, y >= x] qsort( a, lo, hi ) int a[], hi, lo; { 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); t = a[l]; a[l] = a[hi]; a[hi] = t; qsort( a, lo, l-1 ); qsort( a, l+1, hi ); } }
  • 21. Desvantagens • Programas escritos em linguagens imperativas, como C por exemplo, são geralmente mais rápidos e usam menos memória que programas em Haskell – Em aplicações onde a performance é fundamental, uma linguagem imperativa seria uma melhor escolha que Haskell – C oferece maior controle sobre o modo exato como a computação é realizada
  • 22.
  • 23. Programando por Funções areaCirculo r = pi*r^2 quadrado x = x * x maior x y | x >= y = x | otherwise = y
  • 24. Programando por Funções fatorial 1 = 1 fatorial n = n * fatorial (n-1) f x = 2 * x + 4
  • 25.
  • 26. Implementações • Hugs – Exclusivamente um interpretador, implementa quase todo o padrão Haskell 98 e algumas extensões – Escrito em C, funciona em quase todas as plataformas – Possui uma biblioteca gráfica – Último release: maio/2006 (sem manutenção) – https://www.haskell.org/hugs/
  • 27. Implementações • GHC – É tanto um interpretador como um compilador – O ambiente interativo é mais lento que Hugs, mas permite definição de funções no ambiente (em Hugs deve-se colocar em um arquivo) – Implementa o Haskell 2010 – Bom suporte a interface com outras linguagens – Possui interface gráfica – Último release: dezembro/2014 – https://www.haskell.org/downloads
  • 28. Implementações • NHC – É apenas um compilador – Produz executável menor e mais rápido que GHC98 – Dá suporte ao Haskell 98 e algumas extensões – Sem manutenção • UHC – Implementação da Utrecht University – Dá suporte ao Haskell 98 e algumas extensões • JHC – Compilador experimental com o objetivo de testar novos métodos de otimização
  • 29. Haskell GUIs • Haskell possui pelo menos quatro kits de ferramentas para programação de interface gráfica: – wxHaskell – fornece uma interface Haskell para o kit de ferramentas multi-plataformas wxWidgets com suporte a Windows, OS X, e Gtk+ no GNU/Linux, dentre outros – Gtk2Hs – fornece uma interface Haskell para a biblioteca GTK+ – hoc – fornece uma ponte Haskell para Objective-C que permite a usuários acessarem a biblioteca Cocoa no MacOS X – qtHaskell – fornece um conjunto de pontes Haskell para a Qt Widget Library da Nokia
  • 30.
  • 31. Comandos Básicos no GHCi • Ao executar o GHCi, uma sessão é iniciada • O sistema carrega funções pré-definidas (Prelude.hs) e passa a esperar comandos:
  • 32. Comandos Básicos no GHCi • Exemplo de Interação, digitando expressões:
  • 33. Alguns Comandos Importantes • :? imprime a lista de todos os comandos • :q abandona o interpretador • :load carrega definições a partir de um arquivo • :e chama o editor • :e exemplo1.hs editar o arquivo exemplo1.hs • :l exemplo1.hs carregar o arquivo exemplo1.hs • :a exemplo2.hs carregar o arquivo exemplo2.hs • :r recarrega um arquivo modificado • :m + nomeModulo carrega módulo (biblioteca) para a memória • :m – nomeModulo remove módulo da memória • :! comando executar um comando do sistema operacional; • :set visualiza configurações do GHCi (:s +t)
  • 34. Operações Aritméticas • Soma (+), subtração (-), multiplicação (*), divisão (/), exponenciação (^) e raiz quadrada (sqrt) • Agora tente calcular 2^5000 (irá funcionar?)
  • 36. UNIVERSIDADE ESTADUAL DO SUDOESTE DA BAHIA CURSO DE CIÊNCIA DA COMPUTAÇÃO PROGRAMAÇÃO DECLARATIVA – 2016.2 Fábio M. Pereira (fabio.mpereira@uesb.edu.br)