Haskell (é uma função polimorfica) Laboratório Rafael Borges

Slides:



Advertisements
Apresentações semelhantes
TIPOS ABSTRATOS DE DADOS
Advertisements

Programação Funcional
Departamento de Informática Universidade Federal do Espírito Santo
Introdução à Programação: uma Abordagem Funcional Programação I Engenharia de Computação Prof.ª Claudia Boeres e Prof. Estefhan Dazzi Wandekoken 2010/1.
Funções em C Prof. Fabiano Utiyama.
Python: Funções Claudio Esperança.
Paulo Marques Hernâni Pedroso
V Procedimentos – são estruturas que agrupam um conjunto de comandos, que são executados quando o procedimento é chamado. v Funções – são procedimentos.
Programação Funcional
Algoritmo e Programação
Introdução à Programação: uma Abordagem Funcional PD I – Engenharia Elétrica Prof.ª Claudia Boeres 2008/2.
Departamento de Informática Universidade Federal do Espírito Santo
Elsa Carvalho 49 Universidade da Madeira Departamento de Matemática e Engenharias Programação em Lógica e Funcional (2000/01) (Actualizado em 2005/06)
Prof. João Paulo de Brito Gonçalves Sistema de Arquivos - COMANDOS DE VISUALIZAÇÃO, BUSCA E LOCALIZAÇÃO Campus - Cachoeiro Curso Técnico de Informática.
FAFIMAN – Prof. Flávio Uber FAFIMAN – Departamento de Informática Curso: Ciência da Computação Professor: Flávio Rogério Uber Arquitetura e Organização.
Polimorfismo e Acoplamento Dinâmico
Rafael Pinto Frederico Corrêa
LINGUAGEM C Centro Federal de Educação Tecnológica da Paraíba Coordenação de Informática Professor: Lafayette B. Melo.
Linguagem C Estruturas de Seleção.
Capítulo 10 Strings & File I/O. Strings Strings são um conjunto de Caracteres ASCII. No Controle de Instrumentação pode-se converter valores numéricos.
Linguagem de Programação JAVA
Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012.
Linguagem Haskell Riocemar S. de Santana.
CAPÍTULO 05 Listas.
Rodrigo Cristiano Silva
Introdução a Computação e Cálculo Numérico
Introdução a Computação e Cálculo Numérico
Aula prática 9 Alocação Dinâmica Monitoria de Introdução à Programação
Aula prática 8 Ponteiros Monitoria de Introdução à Programação
Aula prática 8 Ponteiros Monitoria de Introdução à Programação.
Prof. Natalia Castro Fernandes Engenharia de Telecomunicações – UFF 2º semestre/2012.
Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012.
Programação Funcional
Programação Funcional
Matlab Mini Curso PET 2012.
Haskell Programação Funcional
©André Santos, Programação Funcional Generalizações André Santos.
©André Santos, Programação Funcional Classes em Haskell André Santos.
Expressões e Instrução de Atribuição
Linguagem Funcional 2 Linguagem Funcional 2 - LF2 Estende LF1 com funções de alta ordem Uma função passa a ser um valor O contexto inclui um único componente:
Centro de Informática – UFPE
© André Santos Programação Funcional Listas André Santos.
Programação em C++ Compiladores
PROGRAMAÇÃO - INTRODUÇÃO George Gomes Cabral. DECOMPOSIÇÃO Dividir para conquistar: Paradigma básico para tratamento de grandes problemas. Nossa meta.
Linguagem de Programação JAVA
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
STRINGS Dilvan Moreira (baseado no livro Big Java e Z. Liang)
Programação Funcional
Aula Prática 1 Monitoria IP/CC (~if669) (A partir do slide elaborado por Luís Gabriel)
CES-41 COMPILADORES Aulas Práticas
MatLab (Matrix Laboratory)
Linguagens Funcionais: Haskell Prática 1 Paradigmas de Linguagens Computacionais Monitor: Guilherme Moura
Generalizações: Map, Fold, Filter, e Composição ©André Santos e Marcelo d’Amorim 2010.
Funções como Valor ©André Santos e Marcelo d’Amorim.
Haskell Programação Funcional Diego Lima Rubem Moreira.
Introdução à Programação
Haskell Programação Funcional Diego Lima Rubem Moreira.
Programação Computacional Aula 8: Entrada e Saída pelo Console Prof a. Madeleine Medrano
Tipos de Dados Todo o trabalho realizado por um computador é baseado na manipulação das informações contidas em sua memória. Estas informações podem.
Programação Funcional 4a. Seção de Slides Tuplas e Definição de Funções Locais em Haskell.
Estruturas Homogêneas – Vetores e Matrizes
Tipos de Dados, Variáveis, Expressões Lógicas e Aritméticas
Linguagem de Programação
Sistemas para Internet Algoritmos e Lógica de Programação
©André Santos, Programação Funcional André Santos.
Estrutura de Dados Prof. André Cypriano M. Costa
Variáveis, expressões e comandos Dilvan Moreira. Lembrando …  Instalação normal (para utilizar no PC com Windows) 
Ambientação com a Sintaxe de Java: parte 2 Prof. Gustavo Wagner Slides Originais: Prof. Tiago Massoni Desenvolvimento de Sistemas FATEC-PB  Centro de.
FUNÇÕES Dilvan Moreira (baseado em material de Z. Liang)
Transcrição da apresentação:

Haskell (é uma função polimorfica) Laboratório Rafael Borges

Hugs Interpretador de Haskell 98 Suporta todos os recursos da linguagem (exceção: módulos) Para iniciá-lo, execute winhugs em p:\hugs98 ou hugs no terminal

Hugs: Comandos :quit Sai do Hugs :? Exibe a ajuda do Hugs

Hugs: Expressões O Hugs pode computador o valor de expressões Haskell. Basta apenas digitá-las no console. > > head [3,2,1] 3 > tail [3,2,1] [2,1]

Exercício: Expressões Calcule o valor das seguintes expressões (no Hugs): > sum [1,2,3,4] > product [1,2,3,4] > “abc” ++ “def” > fst (2,3)

Hugs: Tipos Toda expressão de Haskell (fortemente checada) tem um tipo associado e o Hugs permite descobri-lo através do comando :type > :t :: Num a => a (existe classe de tipo (Polimofismo), o int e float seriam do tipo Num) > :t head [3,2,1] head [3,2,1] :: Num a => a > :t tail [3,2,1] tail [3,2,1] :: Num a => a (=> representa classe de tipo) > :t tail tail :: [a] -> [a] (lista de tipo arbitrario para outra lista de tipo arbitrario) > :t head head :: [a] -> [a] (-> representa função) (lista de tipo arbitrario para outra lista de tipo arbitrario)

Exercício: Tipos Encontre expressões cujos tipos são: Char 'a' :: Char [Char] :t ['b'] ['b'] :: [Char] (Int, Int) :t (5, 5) (5,5) :: (Num a, Num b) => (b,a) (Bool, [Char]) :t (True, ['a']) (True,['a']) :: (Bool,[Char]) [(Bool, Char)] :t [(True, 'a')] [(True,'a')] :: [(Bool,Char)]

Exercício: Tipos Encontre o tipo das seguintes expressões: head funçao que recebe um tipo lista :t head (entrada de uma lista e retorna o 1º da lista) sum :t sum funçao que recebe que recebe um tipo lista de Num sum :: Num a => [a] -> a (O Num restringe a lista) (a lista tem q ser um numeral e usa função adição) fst funçao que recebe um tipo par de variavel de tipo, pq pode receber vários tipos fst :: (a,b) -> a elem funçao que recebe todos os tipos de Eq tem q possuir a função igual :t elem elem :: Eq a => a -> [a] -> Bool (descobrir se um elemento está em uma lista) flip (inverte os parametros da função) (espera uma lista para retornar um caractere) :t flip flip :: (a -> b -> c) -> b -> a -> c Exemplo: flip elem[1,2,5] 2 True flip elem "abc"'a' True flip elem :t flip elem flip elem :: Eq a => [a] -> a -> Bool

Hugs: Arquivos :load Carrega o arquivo no Hugs :load "c:\\temp\\exercicio.hs" Reading file "c:\temp\exercicio.hs": Hugs session for: P:\hugs98\lib\Prelude.hs c:\temp\exercicio.hs :reload Recarrega o último arquivo :cd Modifica a pasta de trabalho

Exercício: Arquivos Carregue o arquivo exercicio.hs e calcule as seguintes expressões: square 2 allEqual allEqual allEqual (square 2) (square (-2)) 4 maxi (square 2) 3

Exercício: Arquivos Modifique o arquivo exercicio.hs, incluindo as seguintes funções: fat :: Int -> Int Calcula n! all4Equal :: Int -> Int -> Int -> Int -> Bool Compara se quatro números são iguais all4Equal :: Int -> Int -> Int -> Int -> Bool Mesmo que anterior, mas usando a definição de allEqual

Exercício: Sales Modifique o arquivo sales.hs, incluindo as seguintes funções: maxSales :: Int -> Int Dada uma semana n, retorna a semana com maior número de vendas entre 0 e n totalSales :: Int -> Int Dada uma semana n, retorna a soma das vendas entre as semanas 0 e n

Exercício: Sales Modifique o arquivo sales.hs, incluindo as seguintes funções: howManyWeeks Dado um valor de vendas e uma semana n, determina quantas semanas entre 0 e n tiveram essa vendagem (defina também seu tipo) averageSales :: Int -> Float Dada uma semana n, calcula a média de vendas entre 0 e n

Exercício: Strings Defina as seguintes funções: makeSpaces :: Int -> String Produz uma String com n espaços vazios pushRight :: Int -> String -> String Adicionar n espaços a uma String (deve usar makeSpaces) howManyWeeks Defina essa função (incluindo seu tipo) que, dado um valor de vendas, determine quantas semanas entre 0 e a fornecida tiveram essa vendagem.

Exercício: Tipos Defina os tipos Point e Triangle (a partir de Point) e as funções distance (calcula a distância entre dois pontos), midPoint (calcula o ponto médio entre dois pontos) e perimeter (calcula o perímetro do triângulo)