Programação Funcional Aulas 9, 10 & 11
|
|
- Mateus Martín Natal Festas
- 6 Há anos
- Visualizações:
Transcrição
1 Programação Funcional Aulas 9, 10 & 11 Sandra Alves DCC/FCUP 2015/16 1 Programas interativos Motivação Até agora apenas escrevemos programas que efetuam computação pura, i.e., transformações funcionais entre valores. Vamos agora ver como escrever programas interativos: lêm informação do teclado, ficheiros, etc.; escrevem no terminal ou em ficheiros;... Ações de I/O Introduzimos um novo tipo IO () para ações que, se forem executadas, fazem entrada/saída de dados. Exemplos: putchar A :: IO () putchar B :: IO () putchar :: Char -> IO () -- imprime um A -- imprime um B -- imprimir um carater 1
2 Encadear ações Podemos combinar duas ações de I/O usando o operador de sequenciação: (>>) :: IO () -> IO () -> IO () Exemplos: (putchar A >> putchar B ) :: IO () (putchar B >> putchar A ) :: IO () Note que >> é associativo mas não é comutativo! Em alternativa podemos usando a notação-do: -- imprimir AB -- imprimir BA = putchar A >> putchar B >> putchar C do {putchar A ; putchar B ; putchar C } Podemos omitir os sinais de pontuação usando a indentação: do putchar A putchar B putchar C Execução Para efetuar as ações de I/O definimos um valor main no módulo Main. module Main where main = do putchar A putchar B Compilar e executar: $ ghc Main.hs -o prog $./prog AB$ Também podemos efetuar ações IO diretamente no ghci: Prelude> putchar A >> putchar B ABPrelude> Definir novas ações Vamos agora definir novas ações de I/O combinando ações mais simples. Exemplo: definir putstr usando putchar recursivamente. putstr :: String -> IO () putstr [] =?? putstr (x:xs) = putchar x >> putstr xs Como completar? 2
3 Ação vazia putstr :: String -> IO () putstr [] = return () putstr (x:xs) = putchar x >> putstr xs return () é a ação vazia: se for efetuada, não faz nada. Mais geralmente IO a é o tipo de ações que, se forem executadas, fazem entrada/saída de dados e devolvem um valor de tipo a. Exemplos: putchar A :: IO () getchar :: IO Char -- escrever um A ; resultado vazio -- ler um caracter; resultado Char Ações IO pré-definidas getchar :: IO Char getline :: IO String getcontents :: IO String putchar :: Char -> IO () putstr :: String -> IO () putstrln :: String -> IO () print :: Show a => a -> IO () return :: a -> IO a -- ler um caracter -- ler uma linha -- ler toda a entrada padrão -- escrever um carater -- escrever uma linha de texto -- idem com mudança de linha -- imprimir um valor -- ação vazia Combinando leitura e escrita Usamos <- para obter valores retornados por uma ação I/O. Exemplo: ler e imprimir caracteres até obter um fim-de-linha. main :: IO () main = do x<-getchar putchar x if x== \n then return () else main Outro exemplo: boasvindas :: IO () boasvindas = do putstr "Como te chamas? " nome <- getline putstr ("Bem-vindo, " ++ nome ++ "!\n") 3
4 Valores de retorno Podemos usar return para definir valores de retorno de ações. boasvindas :: IO String boasvindas = do putstr "Como te chamas? " nome <- getline putstr ("Bem-vindo, " ++ nome ++ "!\n") return nome Outro exemplo: definir getline usando getchar. getline :: IO String getline = do x<-getchar if x== \n then return [] else do xs<-getline return (x:xs) Jogo Hi-Lo Exemplo maior: um jogo de perguntas-respostas. o computador escolhe um número secreto entre 1 e 100; o jogador vai fazer tentativas de advinhar; para cada tentativa o computador diz se é alto ou baixo; a pontuação final é o número de tentativas. Tentativa? 50 Demasiado alto! Tentativa? 25 Demasiado baixo! Tentativa? 35 Demasiado alto! Tentativa? 30 Demasiado baixo! Tentativa? 32 Acertou em 5 tentativas. Vamos decompor em duas partes: main escolhe o número secreto e inicia o jogo; jogo função recursiva que efetua a sequência perguntas-respostas. Programa module Main where import Data.Char(isDigit) import System.Random(randomRIO) 4
5 main = do x <- randomrio (1,100) -- escolher número aletório n <- jogo 1 x -- começar o jogo putstrln ("Acertou em " ++ show n ++ " tentativas") jogo :: Int -> Int -> IO Int jogo n x = do { putstr "Tentativa? " ; str <- getline ; if all isdigit str then let y = read str in if y>x then do putstrln "Demasiado alto!"; jogo (n+1) x else if y<x then do putstrln "Demasiado baixo!"; jogo (n+1) x else return n else do putstrln "Tentativa inválida!"; jogo n x } -- n: tentativas, x: número secreto Ações são valores As ações IO são valores de primeira classe: podem ser argumentos ou resultados de funções; podem passados em listas ou tuplos;... Isto permite muita flexibilidade ao combinar ações. Exemplo: uma função para efetuar uma lista de ações por ordem. seqn :: [IO a] -> IO () seqn [] = return () seqn (m:ms) = m >> seqn ms Exemplos de uso: > seqn [putstrln s s<-["ola", "mundo"]] ola mundo > seqn [print i i<-[1..5]] Sumário Programas reais necessitam de combinar interação e computação pura Em Haskell fica explícito nos tipos quais as funções que fazem interação e quais são puras. 5
6 A notação-do e o tipo IO é usada para: ler e escrever no terminal e em ficheiros; estabelecer comunicações de rede; serviços do sistema operativo (ex: obter data e hora do relógio de sistema); A notação-do pode usada para outras computações não puramente funcionais: estado, não-determinismo, exceções, etc. 2 Definição de tipos Declarações de sinónimos Podemos dar um nome novo a um tipo existente usando uma declaração de sinónimo. Exemplo (do prelúdio-padrão): type String = [Char] As declarações de sinónimos são usadas para melhorar legibilidade de programas. Exemplo: type Pos = (Int,Int) type Cells = [Pos] -- coluna,linha -- colónia Assim podemos escrever isalive :: Cells -> Pos -> Bool em vez de isalive :: [(Int,Int)] -> (Int,Int) -> Bool As declarações de sinónimos também podem ter parâmetros. Exemplo: associações entre chaves e valores. type Assoc ch v = [(ch,v)] -- tabela de associações idades :: Assoc String Int idades = [("Sara", 39), ("Jo~ao", 27), ("Maria", 19)] s :: Assoc String String s = [("Sandra", "sandra@dcc.fc.up.pt"), ("Jo~ao", "joao@gmail.com")] Os sinónimos podem ser usados noutras definições: type Pos = (Int,Int) type Cells = [Pos] -- OK Mas não podem ser usados recursivamente: type List a = (a,list a) -- ERRO 6
7 Declarações de novos tipos Podemos definir novos tipos de dados usando declarações data. Exemplo (do prelúdio-padrão): data Bool = True False A declaração data enumera as alternativas separadas por barras verticais. Cada alternativa deve ter um construtor (ex.: True e False). O nome dos tipos e construtores deve ser começar por uma letra maiúscula. Cada construtor só pode ser usado num único tipo. Podemos definir funções sobre novos tipos usando padrões. Exemplo: um tipo para as direções ortogonais (esquerda, direita, cima, baixo). data Dir = Esq Dir Cima Baixo Vamos definir algumas funções... contraria :: Dir -> Dir contraria Esq = Dir contraria Dir = Esq contraria Cima = Baixo contraria Baixo = Cima mover :: Dir -> Pos -> Pos mover Esq (x,y) = (x-1,y) mover Dir (x,y) = (x+1,y) mover Cima (x,y) = (x,y+1) mover Baixo (x,y)= (x,y-1) -- direção contrária -- deslocar numa direção Construtores com parâmetros Os construtores podem também ter parâmetros. Exemplo: data Figura = Circ Float -- raio Rect Float Float -- largura, altura quadrado :: Float -> Figura quadrado h = Rect h h area :: Figura -> Float area (Circ r) = pi*r^2 area (Rect w h) = w*h Os construtores podem ter diferentes números de parâmetros 7
8 Os parâmetros podem ser de tipos diferentes Podemos usar os construtores de duas formas: como funções para construir um valor Circ :: Float -> Figura Rect :: Float -> Float -> Figura em padrões no lado esquerdo de equações area (Circ r) = pi*r^2 area (Rect w h) = w*h Igualdade e conversão em texto Por omissão um novo tipo não tem métodos de igualdade ou conversão para texto. O interpretador dá erro se tentarmos mostrar ou comparar valores: > Circ 2 ERROR: No instance for (Show Figura)... > Rect 2 1 == Rect 1 2 ERROR: No instance for (Eq Figura)... Podemos definir igualdade e conversão para texto automaticamente usando deriving : data Figura = Circ Float Rect Float Float deriving (Eq, Show) Exemplo de uso: > Circ 2 Circ 2.0 > Rect 2 1 == Rect 1 2 False A igualdade é sintática: dois valores são iguais se e só se têm o mesmo construtor e argumentos. Novos tipos com parâmetros As declarações de novos tipos também podem ter parâmetros. Exemplo: data Maybe a = Nothing Just a -- do prelúdio-padrão safediv :: Int -> Int -> Maybe Int safediv _ 0 = Nothing safediv n m = Just (n div m) safehead :: [a] -> Maybe a safehead [] = Nothing safehead xs = Just (head xs) 8
9 Tipos recursivos As declarações data podem ser recursivas. Exemplo: os números naturais. data Nat = Zero Suc Nat Alguns valores de Nat: Zero Suc Zero Suc (Suc Zero) Suc (Suc (Suc Zero)). -- zero -- um -- dois -- três Em geral: n é obtido aplicado n vezes Succ a Zero. Suc (Suc (... (Suc Zero)...)) Usando recursão, podemos definir funções que convertem entre inteiros e naturais: -- n aplicações int2nat :: Int -> Nat int2nat 0 = Zero int2nat n n>0 = Suc (int2nat (n-1)) nat2int :: Nat -> Int nat2int Zero = 0 nat2int (Suc n)= 1+nat2int n Podemos usar as funções de conversão para somar naturais. add :: Nat -> Nat -> Nat add n m = int2nat (nat2int n + nat2int m) Em alternativa, podemos definir a soma usando recursão sobre naturais. add :: Nat -> Nat -> Nat add Zero m = m add (Suc n) m = Suc (add n m) Estas duas equações traduzem as seguintes igualdades algébricas: = = = 0 + m = m (1 + n) + m = 1 + (n + m) Exemplo: add (Suc (Suc Zero)) (Suc Zero) Suc (add (Suc Zero) (Suc Zero)) Suc (Suc (add Zero (Suc Zero))) Suc (Suc (Suc Zero)) 9
10 Árvores sintáticas Podemos representar expressões por uma árvore sintática em que os operadores são os nós e as constantes são as folhas. Exemplo: As árvores podem ser representadas em Haskell por um tipo recursivo. data Expr = Val Int -- constante Soma Expr Expr -- nó + Mult Expr Expr -- nó A árvore no slide anterior é: Soma (Val 1) (Mult (Val 2) (Val 3)) Exemplos de funções sobre árvores de expressões. -- contar o número de folhas tamanho :: Expr -> Int tamanho (Val n) = 1 tamanho (Soma e1 e2) = tamanho e1 + tamanho e2 tamanho (Mult e1 e2) = tamanho e1 + tamanho e2 -- calcular o valor valor :: Expr -> Int valor (Val n) = n valor (Soma e1 e2) = valor e1 + valor e2 valor (Mult e1 e2) = valor e1 * valor e2 Árvores binárias Também podemos usar árvores binárias para facilitar a organização e pesquisa de informação Podemos representar árvores binárias de inteiros por um tipo recursivo. data Arv = Folha Int No Arv Int Arv 7 10
11 A árvore no slide anterior seria representa por: No (No (Folha 1) 3 (Folha 4)) 5 (No (Folha 6) 7 (Folha 9)) Podemos agora definir uma função recursiva para procurar um valor numa árvore. ocorre :: Int -> Arv -> Bool ocorre m (Folha n) = n==m ocorre m (No esq n dir) = (n==m ocorre m esq ocorre m dir) Numa árvore ordenada todos os nós têm valores inferiores na sub-árvore esquerda e superiores na subárvore direira. Nesse caso podemos simplificar a pesquisa: ocorre :: Int -> Arv -> Bool ocorre m (Folha n) = n==m ocorre m (No esq n dir) n==m = True m<n = ocorre m esq m>n = ocorre m dir Esta definição é mais eficiente: percorre apenas os nós num caminho da raiz até uma folha em vez de todos os nós da árvore. 3 Verificador de tautologias Proposições lógicas Uma proposição lógica é construida apartir de: constantes T, F (verdade e falsidade) variáveis a, b, c,... conectivas lógicas,,, = parêntesis (, ) Exemplos: Tabelas de verdade das conectivas a b a (( a) = F ) ( (a b)) = (( a) ( b)) a b a b F F F T F F F T F T T T a b a b F F F T F T F T T T T T a a F T T F a b a = b F F T T F F F T T T T T 11
12 Tautologias Uma proposição cujo valor é verdade para qualquer atribuição de valores às variáveis diz-se uma tautologia. Exemplo: a a a a F T T T F T Conclusão: a a é uma tautologia. Representação de proposições Vamos definir um tipo recursivo para representar proposições. data Prop = Const Bool -- constantes Var Char -- variáveis Neg Prop -- negação Conj Prop Prop -- conjunção Disj Prop Prop -- disjunção Impl Prop Prop -- implicação deriving (Eq,Show) Exemplo: a proposição é representada como a = (( a) = F ) Impl (Var a ) (Impl (Neg (Var a )) (Const False)) Associação de valores a variáveis Para atribuir valores de verdade às variáveis vamos usar uma lista de associações. Exemplo: a atribuição é representada pela lista [( a,true),( b,false),( c,true)] Definimos: listas de associações entre chaves e valores; a = T b = F c = T uma função para procurar o valor associado a uma chave. type Assoc ch v = [(ch,v)] find :: Eq ch => ch -> Assoc ch v -> v find ch assocs = head [v (ch,v)<-assocs, ch==ch ] É uma função parcial: dá um erro se não encontrar a chave! 12
13 Calcular o valor duma proposição Vamos definir o valor de verdade de uma proposição por recursão. O primeiro argumento é uma atribuição de valores às variáveis. type Atrib = Assoc Char Bool valor :: Atrib -> Prop -> Bool valor s (Const b) = b valor s (Var x) = find x s valor s (Neg p) = not (valor s p) valor s (Conj p q) = valor s p && valor s q valor s (Disj p q) = valor s p valor s q valor s (Impl p q) = not (valor s p) valor s q Gerar atribuições às variáveis Para n variáveis distintas há 2 n linhas na tabela de verdade. Como obter todas as atribuições de forma sistemática? Vamos escrever uma função para gerar todas as sequências de n boleanos (cf. exercício 46): bits :: Int -> [[Bool]] Exemplo, as sequências de comprimento 3 (três variáveis): F F F F F T F T F F T T bits 3 T F F T F T T T F T T T Podemos decompor em duas cópias da tabela para 2 variáveis com uma coluna extra: F F F F F T bits 2 F T F F T T T F F T F T bits 2 T T F T T T Em geral: vamos gerar as sequências de forma recursiva. bits :: Int -> [[Bool]] bits 0 = [[]] bits n = [b:bs bs<-bits (n-1), b<-[false,true]] Falta ainda gerar atribuições; começamos por listar todas as variáveis numa proposição. 13
14 vars :: Prop -> [Char] vars (Const _) = [] vars (Var x) = [x] vars (Neg p) = vars p vars (Conj p q) = vars p ++ vars q vars (Disj p q) = vars p ++ vars q vars (Impl p q) = vars p ++ vars q A função seguinte gera todas as as atribuições de variáveis duma proposição: atribs :: Prop -> [Atrib] atribs p = map (zip vs) (bits (length vs)) where vs = nub (vars p) (A função nub da biblioteca Data.List remove repetidos.) Verificar tautologias Uma proposição é tautologia se e só se for verdade para todas as atribuições de variáveis. tautologia :: Prop -> Bool tautologia p = and [valor s p s<-atribs p] Alguns exemplos: > tautologia (Var a ) False > tautologia (Impl (Var p ) (Var p )) True > tautologia (Disj (Var a ) (Neg (Var a )) True Exercícios 1. Escrever uma função que calcula a lista das atribuições que tornam uma proposição falsa (i.e. uma lista de contra-exemplos). 2. Escrever um programa para imprimir a tabela de verdade duma proposição. 14
Pedro Vasconcelos DCC/FCUP. Programação Funcional 13 a Aula Definição de tipos
Programação Funcional 13 a Aula Definição de tipos Pedro Vasconcelos DCC/FCUP 2014 Declarações de sinónimos Podemos dar um nome novo a um tipo existente usando uma declaração de sinónimo. Exemplo (do prelúdio-padrão):
Leia maisPedro Vasconcelos DCC/FCUP. Programação Funcional 14 a Aula Um verificador de tautologia
Programação Funcional 14 a Aula Um verificador de tautologias Pedro Vasconcelos DCC/FCUP 2014 Proposições lógicas Uma proposição lógica é construida apartir de: constantes T, F (verdade e falsidade) variáveis
Leia maisLinguagens de Programação. Programação Funcional e Haskell Declarando Tipos Thiago Alves
Linguagens de Programação Programação Funcional e Haskell Declarando Tipos Thiago Alves 1 Declarações de Tipos Em Haskell, um novo nome para um tipo existente pode ser definido usando uma declaração de
Leia maisTipos Algébricos. Programação Funcional. Capítulo 11. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto
Programação Funcional Capítulo 11 Tipos Algébricos José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2012.1 1/33 1 Tipos Algébricos 2/33 Tópicos 1 Tipos Algébricos 3/33
Leia maisLinguagens de Programação. Programação Funcional e Haskell Programação Interativa Thiago Alves
Linguagens de Programação Programação Funcional e Haskell Programação Interativa Thiago Alves 1 Introdução Vimos como Haskell pode ser usado para escrever programas batch que recebem todas suas entradas
Leia maisPedro Vasconcelos DCC/FCUP. Programação Funcional 4 a Aula Listas
Programação Funcional 4 a Aula Listas Pedro Vasconcelos DCC/FCUP 2014 Listas Listas são coleções de elementos: em que a ordem é significativa; possivelmente com elementos repetidos. Listas em Haskell Uma
Leia maisPedro Vasconcelos DCC/FCUP. Programação Funcional 3 a Aula Definição de funções
Programação Funcional 3 a Aula Definição de funções Pedro Vasconcelos DCC/FCUP 2014 Definição de funções Podemos definir novas funções simples usando funções pré-definidas. minuscula :: Char -> Bool minuscula
Leia maisPedro Vasconcelos DCC/FCUP. Programação Funcional 2 a Aula Tipos e classes
Programação Funcional 2 a Aula Tipos e classes Pedro Vasconcelos DCC/FCUP 2012 Tipos Um tipo é um nome para uma coleção de valores relacionados. Por exemplo, o tipo Bool True contém dois valores lógicos:
Leia maisLayout. Módulos. Normalmente, cada módulo está armazenado num ficheiro com o mesmo nome do módulo. Exemplo.hs
Layout Ao contrário de quase todas as linguagens de programação, o Haskell não necessita de marcas para delimitar as diversas declarações que constituem um programa. Em Haskell a identação do texto (isto
Leia maisAula Prática 2. Paradigmas da Programação I / Programação Funcional
Aula Prática 2 Paradigmas da Programação I / Programação Funcional ESI/MCC 1 o ano (2005/2006) Nesta aula pretende-se introduzir os conceitos seguintes: valores e expressões; tipos básicos e tipos compostos;
Leia maisPedro Vasconcelos DCC/FCUP. Programação Funcional 8 a Aula Listas infinitas
Programação Funcional 8 a Aula Listas infinitas Pedro Vasconcelos DCC/FCUP 2014 Listas infinitas Podemos usar listas para sequências finitas, por ex.: [1,2,3,4] = 1:2:3:4:[] Nesta aula vamos ver que podemos
Leia maisPedro Vasconcelos DCC/FCUP. Programação Funcional 5 a Aula Definições recursivas
Programação Funcional 5 a Aula Definições recursivas Pedro Vasconcelos DCC/FCUP 2014 Definições usando outras funções Podemos definir funções usando outras previamente definidas (e.g. do prelúdio-padrão).
Leia maisProgramação Funcional Aulas 5 & 6
Programação Funcional Aulas 5 & 6 Sandra Alves DCC/FCUP 2016/17 Definições usando outras funções Podemos definir funções usando outras previamente definidas (por exemplo: do prelúdio-padrão). Exemplo:
Leia maisListas em Haskell. Listas. Linguagem Haskell. Maria Adriana Vidigal de Lima. Faculdade de Computação - UFU. Setembro
em Haskell Linguagem Haskell Faculdade de Computação - UFU Setembro - 2009 em Haskell 1 em Haskell Noções sobre Construção de por Compreensão Funções Sobre Processamento de Fundamentos em Haskell Noções
Leia maisExpressões Condicionais
Programação Funcional Capítulo 4 Expressões Condicionais José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2012.1 1/39 1 Combinando funções 2 Expressão condicional 3
Leia maisExpressão Condicional
Programação Funcional UFOP DECOM 2014.1 Aula prática 4 Expressão Condicional Resumo Expressões condicionais permitem a escolha entre duas alternativas na obtenção do valor da expressão, com base em uma
Leia maisPedro Vasconcelos DCC/FCUP. Programação Funcional 16 a Aula Árvores equilibradas
Programação Funcional 16 a Aula Árvores equilibradas Pedro Vasconcelos DCC/FCUP 2014 Aula anterior Operações sobre árvores binárias ordenadas: 1 pesquisa; 2 inserção; 3 remoção. Estas operações são mais
Leia maisProgramas Interativos
Programação Funcional Capítulo 7 Programas Interativos José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2012.2 1/75 1 Interação com o mundo 2 Ações de saída padrão 3
Leia maisFunções de Ordem Superior
Programação Funcional UFOP DECOM 2014.1 Aula prática 15 Funções de Ordem Superior Sumário Resumo Uma função é conhecida como função de ordem superior quando ela tem uma função como argumento ou resulta
Leia maisFunções de Ordem Superior
Programação Funcional Capítulo 7 Funções de Ordem Superior José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2013.2 1/37 1 Funções de Ordem Superior 2 Composição de funções
Leia maisSimulação de Caixa Automático
Programação Funcional UFOP DECOM 2014.1 Trabalho 1 Simulação de Caixa Automático Sumário Resumo Com esta atividade pretende-se explorar a construção de programas interativos usando ações de entrada e saída
Leia maisPedro Vasconcelos DCC/FCUP. Programação Funcional 18 a Aula Plataforma Haskell
Programação Funcional 18 a Aula Plataforma Haskell Pedro Vasconcelos DCC/FCUP 2014 A plataforma Haskell Compilador e interpretador (GHC/GHCi) Ferramentas de desenvolvimento Um conjunto de módulos de base:
Leia maisAula Prática 3. Paradigmas da Programação I / Programação Funcional. ESI/MCC 1 o ano (2005/2006)
Aula Prática 3 Paradigmas da Programação I / Programação Funcional ESI/MCC 1 o ano (2005/2006) Nesta aula pretende-se que os alunos: consolidem os conceitos de expressão, tipo e redução; compreendam a
Leia maisProgramação Funcional. Capítulo 13. Mônadas. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2013.
Programação Funcional Capítulo 13 Mônadas José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2013.1 1/42 1 Mônadas 2 Entrada e saída 3 Expressão do 4 Computações que podem
Leia maisProgramas Interativos
Programação Funcional Capítulo 8 Programas Interativos José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2012.1 1/73 1 Interação com o mundo 2 Ações de saída padrão 3
Leia maisPedro Vasconcelos DCC/FCUP. Programação Funcional 7 a Aula Funções de ordem superior
Programação Funcional 7 a Aula Funções de ordem superior Pedro Vasconcelos DCC/FCUP 2013 Funções de ordem superior Uma função é de ordem superior se tem um argumento que é uma função ou um resultado que
Leia mais4.2. CLASSES Versão
4.2. CLASSES Versão 1.5 28 4.2 Classes Em Haskell é possível definir novos tipos e inseri-los na estrutura de classe de tipos. Desta forma é possível obter funções para comparar valores dos novos tipos,
Leia maisIntrodução à Programação Aula 3 Primeiros programas
Introdução à Programação Aula 3 Primeiros programas Pedro Vasconcelos DCC/FCUP 2015 Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 3 Primeiros programas 2015 1 / 23 Nesta aula... 1 Tipos básicos
Leia maisExpressões Lambda. Programação Funcional. Capítulo 7. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto
Programação Funcional Capítulo 7 Expressões Lambda José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2012.1 1/64 1 Valores de primeira classe 2 Expressão lambda 3 Aplicação
Leia maisConceitos de Linguagens de Programação
Conceitos de Linguagens de Programação Aula 09 Programação Funcional (Haskell) Edirlei Soares de Lima Programação Funcional A programação funcional modela um problema computacional
Leia maisProgramação Funcional
Programação Funcional Lucília Camarão de Figueiredo Universidade Federal de Ouro Preto lucilia@dcc.ufmg.br Aula 04: Definição de funções 1 DEFINIÇÃO DE FUNÇÕES f x1 x2...xn = E Define uma função f de tipo
Leia maisProgramas Interativos
Programação Funcional DECOM UFOP 2012-1 Aula prática Capítulo 8 Prof. José Romildo Malaquias Programas Interativos Resumo Nesta aula pretende-se explorar construção de programas interativos usando ações
Leia maisPedro Vasconcelos DCC/FCUP. Programação Funcional 15 a Aula Árvores de pesquisa
Programação Funcional 15 a Aula Árvores de pesquisa Pedro Vasconcelos DCC/FCUP 2014 Árvores binárias Um árvore binária é um grafo dirigido, conexo e acíclico em que cada vértice é de um de dois tipos:
Leia maisPedro Vasconcelos DCC/FCUP. Programação Funcional 17 a Aula Tipos abstratos
Programação Funcional 17 a Aula Tipos abstratos Pedro Vasconcelos DCC/FCUP 2014 Tipos concretos Até agora definimos um novo tipo de dados começando por listar os seus construtores. data Bool = False True
Leia maisProgramação Funcional. Aula 10. Parsers. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto /74 ...
Programação Funcional Aula 10 Parsers José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011.2 1/74 1 Parsers 2 Definindo um tipo para parsers 3 Parsers básicos 4 Combinadores
Leia maisProgramação Funcional em Haskell
Funções Genéricas sobre Listas Junho - 2009 1 Funções Genéricas 2 Introdução Em Haskell, como em qualquer linguagem funcional, funções são objetos de primeira classe, em que funções não avaliadas podem
Leia maisVariáveis e Entrada de Dados Marco André Lopes Mendes marcoandre.googlepages.
Variáveis e Entrada de Dados Marco André Lopes Mendes marcoandre@ifc-araquari.edu.br marcoandre@gmail.com marcoandre.googlepages.com Algoritmos é a base Primeiro programa Este programa possui apenas uma
Leia maisPedro Vasconcelos DCC/FCUP. Programação Funcional 10 a Aula O Jogo da Vida
Programação Funcional 10 a Aula O Jogo da Vida Pedro Vasconcelos DCC/FCUP 2014 O Jogo da Vida Um autómato celular inventado pelo matemático John H. Conway. O jogo desenrola-se numa grelha bi-dimensional.
Leia maisEntrada e Saída de Dados
UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO CENTRO TECNOLÓGICO PET - Engenharia de Computação Entrada e Saída de Dados Programação 1 Vitória, 28 de Maio de 2010 Ivan de Oliveira Nunes Engenharia de Computação
Leia maisCasamento de Padrão. Programação Funcional. Capítulo 6. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto
Programação Funcional Capítulo 6 Casamento de Padrão José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2012.2 1/66 1 Casamento de padrão 2 Expressão case 3 Definição
Leia maisProfessor: Domingos Equipe Haskell: Lucas Montesuma, Francisco Leonardo CONCEITOS DA LINGUAGEM DE PROGRAMAÇÃO CÁLCULADORA EM HASKELL
Professor: Domingos Equipe Haskell: Lucas Montesuma, Francisco Leonardo CONCEITOS DA LINGUAGEM DE PROGRAMAÇÃO CÁLCULADORA EM HASKELL Sobre a Linguagem Haskell Inicialmente temos no trabalho o uso da versão
Leia maisAlgoritmos e Estruturas de Dados I (DCC/003) 2013/1. Estruturas Básicas. Aula Tópico 4
Algoritmos e Estruturas de Dados I (DCC/003) 2013/1 Estruturas Básicas Aula Tópico 4 1 Problema 3 Exibir o maior número inteiro que pode ser representado no computador. 2 Qual o maior número inteiro? Para
Leia maisLinguagens de Programação Aula 13
Linguagens de Programação Aula 13 Celso Olivete Júnior olivete@fct.unesp.br Na aula passada Suporte para a programação orientada a objetos 2 Na aula de hoje Programação Funcional Linguagem Haskell 3 Roteiro
Leia maisConceitos Básicos Linguagem C
Conceitos Básicos Linguagem C PROF. MAURÍCIO A DIAS MACDIASPAE@GMAIL.COM 2 Método Método básico para construção de algoritmos 1. Compreender completamente o problema a ser resolvido, se possível dividindo
Leia maisLinguagem Haskell. Maria Adriana Vidigal de Lima
em Haskell Linguagem Haskell Faculdade de Computação - UFU Dezembro - 2009 em Haskell 1 em Haskell Noções sobre Fundamentos em Haskell Noções sobre Uma árvore é uma estrutura de dados baseada em listas
Leia maisImplementação de Linguagens
Implementação de Linguagens Pedro Vasconcelos DCC/FCUP 11 de Abril de 2016 Objectivos Introdução à implementação de linguagens de programação funcionais. Enfoce sobre técnicas de interpretação/compilação
Leia maisMétodos Computacionais. Operadores, Expressões Aritméticas e Entrada/Saída de Dados
Métodos Computacionais Operadores, Expressões Aritméticas e Entrada/Saída de Dados Tópicos da Aula Hoje aprenderemos a escrever um programa em C que pode realizar cálculos Conceito de expressão Tipos de
Leia maisIntrodução à Programação em C (II)
Introdução à Programação em C (II) Resumo Streams de Texto Leitura e escrita de caracteres Caracteres como números inteiros Exemplos Cópia de Ficheiros Contagem de Caracteres Contagem de Linhas Contagem
Leia maisAula 5 Oficina de Programação Introdução ao C. Profa. Elaine Faria UFU
Aula 5 Oficina de Programação Introdução ao C Profa. Elaine Faria UFU - 2017 Linguagem de Programação Para que o computador consiga ler um programa e entender o que fazer, este programa deve ser escrito
Leia maisLinguagem Haskell. Riocemar S. de Santana
Linguagem Haskell Riocemar S. de Santana Haskell, o que é? É uma linguagem de programação puramente funcional, de propósito geral. Nomeada em homenagem ao matemático americano Haskell B. Curry (1900 1982).
Leia maisCasamento de Padrão. Programação Funcional. Capítulo 5. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto
Programação Funcional Capítulo 5 Casamento de Padrão José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2012.1 1/63 1 Casamento de padrão 2 Expressão case 3 Definição
Leia maisquadrado(a)*0.5 -((a+2)*f(x,(1.0+n)/x)) Arquitectura de Computadores (2008/2009) - Linguagem C - Expressões 2
Linguagem C Expressões Expressões em C Cast, condições, atribuições Operadores lógicos de bits Precedência dos operadores Expressões em C Uma expressão é a forma de calcular um valor num programa: quadrado(a)*0.5
Leia maisConceitos básicos de programação
Constantes class Exemplo { static void Main() { float fahr, celsius; int lower, upper, step; lower = 0; /* limite inferior da tabela de temperaturas */ upper = 300; /* limite superior */ step = 20; /*
Leia maisComputação L2. Linguagem C++ Observação: Material Baseado na Disciplina Computação Eletrônica.
Computação L2 Linguagem C++ ovsj@cin.ufpe.br Observação: Material Baseado na Disciplina Computação Eletrônica. Alfabeto São os símbolos ( caracteres ) permitidos na linguagem: Letras (maiúsculas e minúsculas);
Leia maisAula prática 5. Funções Recursivas
Programação Funcional UFOP DECOM 2014.1 Aula prática 5 Funções Recursivas Resumo Definições recursivas são comuns na programação funcional. Nesta aula vamos aprender a definir funções recursivas. Sumário
Leia maisLógica Computacional Aula 4
Lógica Computacional Aula 4 DCC/FCUP 2017/18 Conteúdo 1 Lógica proposicional 1 1.1 Fórmulas de Horn.......................................... 1 1.2 Satisfazibilidade............................................
Leia maisIntrodução à Ciência da Computação scc-120
ICMC USP 1.semestre/2011 Introdução à Ciência da Computação scc-120 Aula : Variáveis em C Profa. Roseli Romero mailto: rafrance@icmc.sc.usp.br Slides cedidos pela profa. Renata Fortes Variáveis variáveis
Leia maisTCC 00308: Programação de Computadores I Organização de programas em Python
TCC 00308: Programação de Computadores I 2017.1 Organização de programas em Python Vamos programar em Python! Como um programa é organizado? Quais são os tipos de dados disponíveis? Como variáveis podem
Leia maisPROGRAMAÇÃO I E N T R A DA E S A Í DA D E DA D O S
PROGRAMAÇÃO I VA R I Á V E I S, C O N S TA N T E S, O P E R A D O R E S E N T R A DA E S A Í DA D E DA D O S Variáveis 2 Variáveis são locais onde são armazenados os valores na memória. Toda variável é
Leia maisIntrodução à Programação em C (I)
Introdução à Programação em C (I) IAED Tagus, 2009/2010 Organização de Ficheiros em C Organização Típica de Ficheiros em C Inclusão de bibliotecas de sistema Inclusão de bibliotecas locais Definição de
Leia maisÁRVORES E ÁRVORE BINÁRIA DE BUSCA
ÁRVORES E ÁRVORE BINÁRIA DE BUSCA Prof. André Backes Definição 2 Diversas aplicações necessitam que se represente um conjunto de objetos e as suas relações hierárquicas Uma árvore é uma abstração matemática
Leia maisLinguagens de Programação
Linguagens de Programação Fabio Mascarenhas - 2015.2 http://www.dcc.ufrj.br/~fabiom/lp Introdução Quais das expressões abaixo têm o mesmo significado? (vector-ref a 42) Introdução Quais das expressões
Leia mais1 Expressões, valores e tipos 1. 2 Variáveis e atribuições 5. cálculo de expressões segue a estrutura de parênteses e as prioridades dos operadores
Nesta aula... Conteúdo 1 Expressões, valores e tipos 1 2 Variáveis e atribuições 5 1 Expressões, valores e tipos Expressões e valores Tipos programas calculam expressões para produzir valores cálculo de
Leia maisLinguagens de Programação I
Linguagens de Programação I Tema # 4 Operadores em C Susana M Iglesias FUNÇÕES ENTRADA-SAÍDA I/O printf(), utilizada para enviar dados ao dispositivo de saída padrão (stdout), scanf(), utilizada para ler
Leia maisFunções de Entrada e Saída
inicio Escrita no ecrã (Saída de dados) Escrever( introduza o valor do raio ) Raio Leitura do valor do raio S Raio < 0 N O utilizador insere o valor do raio (Entrada de dados do teclado) Escrita no ecrã
Leia maisProgramação Funcional Capítulo 3 Tipos e Classes
Programação Funcional Capítulo 3 Tipos e Classes José Romildo Malaquias 2012.1 Departamento de Computação Universidade Federal de Ouro Preto 1 / 68 1 Valores, expressões e tipos 2 Listas 3 Tuplas 4 Funções
Leia maisDURAÇÃO DA PROVA: 2 horas
MAC2166 Introdução à Computação Grande Áreas Civil, Mecânica, Petróleo e Química Escola Politécnica Terceira Prova 21 de junho de 2016 Nome: Assinatura: N o USP: Turma: Professor: Instruções: 1. Não destaque
Leia maisEstruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.
1 Estruturas da linguagem C 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões. Identificadores Os identificadores seguem a duas regras: 1. Devem ser começados por letras
Leia maisPRIMEIROS PASSOS COM PYTHON. Prof. Msc. Luis Filipe Alves Pereira 2015
PRIMEIROS PASSOS COM PYTHON Prof. Msc. Luis Filipe Alves Pereira 2015 PRIMEIROS PASSOS COM PYTHON 02/47 O QUE É PYTHON? Python é uma linguagem de propósito geral, de alto nível e interpretada Python será
Leia maisUniversidade Federal de Uberlândia - UFU Faculdade de Computação - FACOM Lista de exercícios de programação em linguagem Python
Universidade Federal de Uberlândia - UFU Faculdade de Computação - FACOM Lista de exercícios de programação em linguagem Python Exercícios: Funções 1. Crie uma função que recebe como parâmetro um número
Leia maisIntrodução à Programação em C
Introdução à Programação em C Tipos e Operadores Elementares Estruturas de Controlo Resumo Novidades em C Exemplo: Factorial Tipos de Dados Básicos Saltos Condicionais: if-then-else Valor de retorno de
Leia mais1/50. Conceitos Básicos. Programa Básico
1/50 Conceitos Básicos Programa Básico 2/50 Operações básicas de entrada e saída #include main retorna um inteiro int main() { std::cout
Leia maisPedro Vasconcelos DCC/FCUP. Programação Funcional 14 a Aula Tipos abstratos de dados
Programação Funcional 14 a Aula Tipos abstratos de dados Pedro Vasconcelos DCC/FCUP 2012 Tipos concretos de dados Até agora definimos um novo tipo de dados listamos os seus construtores. data Bool = False
Leia maisLinguagem C++ Estruturas de controle Parte II Estruturas de repetição
Fundamentos de Programação Linguagem C++ Estruturas de controle Parte II Estruturas de repetição Prof. Bruno E. G. Gomes IFRN 1 Estruturas de Controle Permitem o controle da sequência de execução de um
Leia maisOs valores são as entidades básicas da linguagem Haskell. São os elementos atómicos.
Valores & Expressões Os valores são as entidades básicas da linguagem Haskell. São os elementos atómicos. As expressões são obtidas aplicando funções a valores ou a outras expressões. O interpretador Haskell
Leia maisLinguagem C: Introdução
Linguagem C: Introdução Linguagem C É uma Linguagem de programação genérica que é utilizada para a criação de programas diversos como: Processadores de texto Planilhas eletrônicas Sistemas operacionais
Leia maisProgramação: Vetores
Programação de Computadores I Aula 09 Programação: Vetores José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/62 Motivação Problema Faça um programa que leia
Leia maisIntrodução a Programação
Introdução a Programação Prof. André Gustavo Duarte de Almeida andre.almeida@ifrn.edu.br docente.ifrn.edu.br/andrealmeida Aula 02 Primeiro Programa Roteiro Primeiros Passos Variáveis Expressões Comandos
Leia mais1 Definição de funções 1. 2 Valores boleanos e condicionais 5. Podemos depois usar as novas funções tal qual as pré-definidas
Nesta aula... Conteúdo 1 Definição de funções 1 2 Valores boleanos e condicionais 5 1 Definição de funções Definição de novas funções Na aula passada: vimos como usar os operadores e funções pré-definidas
Leia maisUniversidade Estadual da Paraíba - UEPB Curso de Licenciatura em Computação
Universidade Estadual da Paraíba - UEPB Curso de Licenciatura em Computação Análise Semântica Disciplina: Compiladores Equipe: Luiz Carlos dos Anjos Filho José Ferreira Júnior Compiladores Um compilador
Leia maisIntrodução à Programação em C (I)
Introdução à Programação em C (I) Factorial Definição de função para cálculo de factorial Scheme (define (factorial n) (if (= n 1) 1 (* n (factorial (- n 1))))) C int factorial (int n) { if (n == 1) return
Leia maisVetores em Haskell. Vetores e Matrizes. Linguagem Haskell. Maria Adriana Vidigal de Lima. Faculdade de Computação - UFU.
Vetores em Haskell Linguagem Haskell Faculdade de Computação - UFU Setembro - 2009 Vetores em Haskell 1 Vetores em Haskell Fundamentos Vetores em Haskell Um vetor é um conjunto finito de elementos homogêneos.
Leia maisIntrodução à Programação uma Abordagem Funcional
Universidade Federal do Espírito Santo Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia Boeres boeres@inf.ufes.br CT VII - Sala 34 Departamento de Informática Centro Tecnológico
Leia maisIntrodução à Programação
Introdução à Programação Variáveis em C Slides da Profa. Roseli Romero Comandos de Entrada e Saída O objetivo de escrevermos programas é em última análise, a obtenção de resultados (Saídas) depois da elaboração
Leia maisArquitetura Von Neumann Dados e instruções são obtidos da mesma forma, simplificando o desenho do microprocessador;
1 Microprocessador Um microprocessador é um circuito eletrônico capaz de realizar diversas tarefas conforme os comandos específicos. Para isso ele deve ler esses comandos da memória de programa (ROM) e
Leia maisESTRUTURAS DE CONTROLE
ESTRUTURAS DE CONTROLE ESTRUTURA SEQUENCIAL E ESTRUTURAS CONDICIONAIS Introdução à Ciência da Computação Estruturas de Controle ESTRUTURA SEQUENCIAL ESTRUTURAS CONDICIONAIS Estrutura Condicional Simples
Leia maisÁrvores. Prof. César Melo DCC/ICE/UFAM
Árvores Prof. César Melo DCC/ICE/UFAM Introdução As estruturas anteriores são chamadas de unidimensionais (ou lineares) Exemplo são vetores e listas Não podem ser usadas como hierarquias. Exemplo: árvore
Leia maisLISTA DE EXERCÍCIOS MÊS 04
São José dos Campos, 05 de Junho de 2008 Disciplina: CES 10 Introdução à Computação. Semestre 2008-2º Período Professor: Carlos Henrique Quartucci Forster Estagiária: Michelle de Oliveira Parreira Instituto
Leia maisÁrvores. Prof. César Melo DCC/ICE/UFAM
Árvores Prof. César Melo DCC/ICE/UFAM Introdução As estruturas anteriores são chamadas de unidimensionais (ou lineares) Exemplo são vetores e listas Não adequadas para representar hierarquias. Exemplo:
Leia maisLINGUAGEM C: VARIÁVEIS E EXPRESSÕES
LINGUAGEM C: VARIÁVEIS E EXPRESSÕES Prof. André Backes LINGUAGENS DE PROGRAMAÇÃO Linguagem de Máquina Computador entende apenas pulsos elétricos Presença ou não de pulso 1 ou 0 Tudo no computador deve
Leia maisComputação Fiável Indução - exercícios básicos
Computação Fiável Indução - exercícios básicos Simão Melo de Sousa 17 de Outubro de 2011 Conteúdo 1 Indução Estrutural 1 2 Indução Bem Fundada 9 1 Indução Estrutural Exercício 1 Demonstre por indução estrutural
Leia maisResolução De Problemas Em Informática. Docente: Ana Paula Afonso Resolução de Problemas. 1. Analisar o problema
ALGORITMIA Resolução De Problemas Em Informática Docente: Ana Paula Afonso 2000-2001 Resolução de Problemas 1. Analisar o problema Conhecer o bem o problema Descrever o problema: subdividir, detalhar 2.
Leia maisLinguagens de Programação. Programação Funcional. Carlos Bazilio
Linguagens de Programação Programação Funcional Carlos Bazilio carlosbazilio@puro.uff.br http://www.ic.uff.br/~bazilio/cursos/lp Funções como Valores de 1a. Classe Atribuição a Variáveis a = f() g = f
Leia maisTÉCNICO DE INFORMÁTICA - SISTEMAS
782 - Programação em C/C++ - estrutura básica e conceitos fundamentais Linguagens de programação Linguagem de programação são conjuntos de palavras formais, utilizadas na escrita de programas, para enunciar
Leia maisMATRIZES. Conceitos e Operações
MATRIZES Conceitos e Operações As matrizes são tabelas de números reais utilizadas em quase todos os ramos da ciência e da engenharia. Várias operações realizadas por computadores são através de matrizes.
Leia maisEstruturas de Dados Aula 16: Árvores com Número Variável 13/06/2011
Estruturas de Dados Aula 16: Árvores com Número Variável de Filhos 13/06/2011 1 Fontes Bibliográficas Livros: Introdução a Estruturas de Dados (Celes, Cerqueira e Rangel): Capítulo 13; Projeto de Algoritmos
Leia maisAula 15 Variáveis Indexadas (vetores)
Aula 15 Variáveis Indexadas (vetores) Além das variáveis normais já conhecidas, podemos ter também variáveis indexadas. Tais variáveis são referenciadas por um nome e um índice. Especialmente úteis para
Leia maisUSANDO UM MÉTODO INDUTIVO PARA RESOLVER PROBLEMAS. Bruno Maffeo Departamento de Informática PUC-Rio
USANDO UM MÉTODO INDUTIVO PARA RESOLVER PROBLEMAS Bruno Maffeo Departamento de Informática PUC-Rio MÉTODO INDUTIVO O método indutivo para resolver problemas aqui empregado inspira-se na formulação mais
Leia mais