Ir para o conteúdo

Pesquisar na Comunidade

A mostrar resultados para tags ''haskell''.



Mais opções de pesquisa

  • Pesquisa por Tags

    Introduza as tags separadas por vírgulas.
  • Pesquisar por Autor

Tipo de Conteúdo


Fórum

  • Bem-vindos ao Portugal-a-Programar
    • Sugestões, Críticas ou Dúvidas relativas ao P@P
    • Acerca do P@P
  • Comunidade a Trabalhar
    • Wiki P@P
    • Apresentação de Projectos de Programação
    • Downloads
  • Revista PROGRAMAR
    • Revista PROGRAMAR
  • Desenvolvimento Geral
    • C
    • C++
    • Java
    • Haskell
    • Pascal
    • Python
    • Bases de Dados
    • Visual Basic Clássico
    • Visual Basic for Applications (VBA)
    • Dispositivos Móveis
    • Outras Linguagens
  • Desenvolvimento Orientado para Web
    • PHP
    • HTML
    • CSS
    • Javascript
    • Outras Linguagens de WebDevelopment
    • Desenvolvimento Web
  • Desenvolvimento .NET
    • C#
    • Visual Basic .NET
    • ASP.NET
    • WPF & SilverLight
  • Software e Sistemas Operativos
    • Software de Produtividade
    • Sistemas Operativos
    • SharePoint
    • Apresentação de Software
  • Informática Extra-Programação
    • Interfaces Visuais
    • Computação Gráfica
    • Algoritmia e Lógica
    • Segurança e Redes
    • Hardware
    • Electrónica
    • Automação Industrial
    • Dúvidas e Discussão de Programação
    • Notícias de Tecnologia
  • Outras Áreas
    • Matemática
    • Dúvidas Gerais
    • Discussão Geral
    • Eventos
    • Anúncios de Emprego
    • Tutoriais
    • Snippets / Armazém de Código
  • Arquivo Morto
    • Projectos Descontinuados
    • System Empires

Blogs

  • Blog dos Moderadores
  • Eventos
  • Notícias de Tecnologia
  • Blog do Staff
  • Revista PROGRAMAR
  • Projectos
  • Wiki

Categorias

  • Revista PROGRAMAR
  • Tutoriais
  • Textos Académicos
  • Exercícios Académicos
    • Exercícios c/ Solução
    • Exercícios s/ Solução
  • Bibliotecas e Aplicações
  • Outros

Procurar resultados em...

Pesquisar conteúdos que contêm...


Data de Publicação

  • Início

    Fim


Última Actualização

  • Início

    Fim


Filtrar por número de...

541 resultados

  1. Pedro Augusto

    Tempo de execução do código

    Olá Senhores, preciso medir o tempo de execução de alguns códigos em Haskell, preciso do tempo Real, User e Sys. Como proceder?
  2. nuno35

    Árvore

    Boa Tarde Tenho uma arvore de uma familia e tenho de percorrer a arvore e quando encontrar um nome acrecentar um descendente ja estive a procurar bastante mas nao consigo encontrar uma maneirade percorrer a arvore, alguem pode dar uma ajuda? Desde ja Obrigado
  3. CarolC

    Validar XML em Haskell

    Olá, gostaria de saber se alguém já validou um documento XML por meio de seu DTD e também de seu XSD utilizando Haskell. Encontrei algumas APIs, mas poucos lugares explicando como utilizá-las...
  4. ricardo peixoto

    Acumuladores

    Utilizando uma função auxiliar com acumuladores, optimize seguinte definição que determina a soma do segmento inicial de uma lista com soma máxima maxSumInit :: (Num a, Ord a) => [a] -> a maxSumInit l = maximum [sum m | m <- inits l]
  5. nuno35

    Somar dígitos

    Boa tarde estou a tentar fazer uma funçao que some os digitos de um numero a funçao recebe um numero de 1 ate 999 e por exemplo se for 234 tem de devolver 9(2+3+4). Estava a tentar fazer usando o resto da divisao mas nao estou a conseguir alguma ajuda sff
  6. nuno35

    Filtrar Lista

    Ola tenho aqui um problema Tenho uma lista de numeros e tenho de percorrer essa lista e ver se os 5 vizinhos de cada numero sao divisiveis por dois se nenhum vizinho for tenho de por esse numero numa lista e no fim devolver a lista com todos os numeros que nao teem vizinhos divisiveis por 2 alguma ajuda sff. [y | numeros, if y + 5 `mod` 2 == 0 then y:resultado] tenho isto mas so ve o 5º à sua frente
  7. Rui Carlos

    Tutorial de Haskell

    Introdução O Haskell é uma linguagem de programação funcional, baseada no lambda-calculus, que surgiu nos anos 80. Esta linguagem possui algumas das mais recentes caracteristicas das linguagens funcionais como lazy evaluation, pattern matching e modularidade. Trata-se de uma linguagem pouco eficiente e como tal ainda não muito usado em empresas. Apesar de tudo é uma das linguagem mais populares no meio académico e muito usada em investigação. Os programas tanto podem ser compilados (usando um compilador como o GHC) ou interpretados (usando o GHCi ou o HUGS, por exemplo). Para fazer o download basta irem a http://www.haskell.org/haskellwiki/Implementations Ao longo deste texto vou utilizar como compilador/interpretador o GHC. Algumas noções preliminares Um programa em Haskell deve começar com a linha module Nome_Mod where, onde 'Nome_Mod' é o nome deste módulo, que tem que começar por letra maiúscula. O nome do ficheiro deverá ser 'Nome_Mod.hs', embora não seja obrigatório, será necessário caso queiramos importar este módulo noutro programa. Para definir um comentário de uma linha usamos os caracteres '--' e para comentários de mais do que uma linhas usamos '{-' (e '-}'). Os tipos em Haskell começam por letras maiúsculas sendo os básicos Int, Integer, Float, Double, Char e Bool. O primeiro programa module PrimeiroProg where funcao :: Int -> Int funcao x = x^2 Talvez estivessem à espera que colocasse aqui o famoso "Hello World", no entanto definir uma função que imprime uma mensagem no ecrã é um pouco complexo (obriga-nos a utilizar monad's), como tal fica um exemplo da função 'f(x)=x2' Para testar o programa basta guardar o ficheiro ('PrimeiroProg.hs') e, depois de instalado o GHC, executar o comando 'ghci PrimeiroProg.hs' (em Windows normalmente até podemos clicar duas vezes sobre o icon que o GHC abre-se automaticamente). Para testar a função fazem funcao n onde n é um inteiro qualquer e deverão obter como resultado n2. De referir que a 3ª linha (a assinatura da função) não é obrigatória, o Haskell possui um mecanismo de inferência de tipos que lhe permite determinar o tipo das funções. Como podem ver é muito simples definir funções matemáticas em Haskell. Deixo-vos mais alguns exemplos: f1 :: Float -> Float -> Bool f1 x y = x * y > 0 divInt :: Int -> Int -> Int divInt a b = if b == 0 then a else div a b resto :: Int -> Int -> Int resto a b = if b /= 0 then a `mod` b else 0 soma x y = (+) x y -- verifica se um caracter é uma vogal vogal :: Char -> Bool vogal a = if a=='a' || a=='e' || a=='i' || a=='o' || a=='u' then True else False f2 :: (Float,Float,Float) -> Float -> Bool f2 (a,b,c) d = sin ((a * b) / c) > d Aqui podemos ver exemplo de funções com if's (que ao contrário de muitas linguagens, precisam sempre do 'else') e os operadores prefixos div e mod. Na função resto podemos ver como "transformar" um operador prefixo (neste caso o mod) num infixo, basta envolve-lo por acentos graves (e não plicas). Também operadores infixos podem passar a prefixo envolvendo-os com parentesis (tal como acontece na função soma). Reparem que na função vogal o then passa para a linha seguinte, podemos fazê-lo desde de que a linha esteja identada (bastava ser um caracter). Por último podemos ver a utilização de tuplos. Neste exemplo todos os elementos são do tipo Float, mas podiam ser de tipos diferentes. Para simplificar as coisas, podemos considerar que uma função do tipo Int->Int->Int é uma função que recebe dois inteiros e devolve um inteiro. No entanto isso não é verdade, mas isto são pormenores um pouco mais avançados da linguagem. Podem agora testar as funções fazendo, por exemplo, 'resto 14 3', 'vogal 'b'', 'f2 (1,2,3) 0'... Recursividade Em Haskel não há ciclos, como tal a maior parte dos problemas resolvem-se com recursividade. factorial n = if n == 0 then 1 else n * factorial (n-1) quadrado n = if n == 0 then 0 else quadrado (n-1) + 2 * n - 1 Mais à frente serão apresentados exemplos mais complexos... Outras formas de exprimir condicionais As seguintes funções são todas equivalentes. Tratam-se de funções que verificam se um valor é 0 ou não. isZero a = if a == 0 then True else False isZero a | a == 0 = True | a /= 0 = False isZero a | a == 0 = True | otherwise = False isZero a = case a of 0 -> True x -> False isZero a = case a of 0 -> True _ -> False isZero 0 = True isZero _ = False Acho que é relativamente fácil perceber os exemplos. Talvez os mais complicados sejam os 3 últimos onde é usado pattern matching. Basicamente aqui o programa tenta encaixar os argumento em padrões (este caso verificar se coincide com 0). O caracter '_' significa "qualquer coisa", ou seja, tudo encaixa no '_'. De referir ainda que no último exemplo não podiamos trocar a ordem das linhas, caso contrário daria sempre False, pois o programa executa a primeira "versão" que encaixe no padrão. Nestes exemplos apenas temos dois casos, mas se fossem mais o código seria semelhante. Listas e strings O Haskell suporta também um tipo de dados muito útil, as listas. Ao contrário dos tuplos, os elementos de uma lista têm que ser todos do mesmo tipo. Vejamos alguns exemplos. comprimento l=length l vazia [] = True vazia _ = False primeiro :: [int] -> Int primeiro lista = head lista cauda [] = [] cauda lista = tail lista junta :: [int] -> [int] -> [int] junta lista1 lista2 = lista1 ++ lista2 adiciona :: Int -> [int] -> [int] adiciona x l = x : l somatorio [] = 0 somatorio (x : xs) = x + (somatorio xs) Aqui foram utilizadas as função head (devolve o primeiro elemento da lista), tail (devolve a "cauda" da lista), '++' (junta duas listas) e ':' (adiciona um elemento no início). A última função calcula o somatório de uma lista de números. Quando recebe uma lista vazia ('[]') devolve 0, se não for vazia, então a lista encaixa no padrão x : xs, ou seja, é um primeiro elemento (x) mais uma cauda (xs), cauda essa que pode ser uma lista vazia. As strings em Haskell não são mais do que listas de caracteres. juntaLetra :: Char -> String -> [Char] juntaLetra l str = l : str juntaNoFin l str = str ++ [l] -- a função 'take' selecciona os n primeiro elementos de uma lista dezLetras str = take 10 str comprimento str = length str De seguida mostram-se algumas formas de definir listas -- lista dos inteiros de 1 a 100 [1..100] -- lista dos números pares maiores do que zero e menores do que 100 [2,4..100] -- lista dos quadrados dos numeros inteiros de 1 a 20 [n^2 | n <- [1..20]] -- lista [(1,0),(2,1),(3,0),...] [(n,ispar) | n <- [1..20] , ispar <- [0,1] , ((mod n 2==0 && ispar==1) || (odd n && ispar==0))] -- lista de tadas as combinações de elementos de [1,2,3] e de [4,5,6] [(x,y) | x <- [1,2,3] , y <- [4,5,6]] -- lista de TODOS os números inteiros maiores do que 0 [1..] Um pormenor interessante, derivado do facto do Haskell ser lazy, e que alguns de vocês devem ter achado estranho, é que podemos ter listas infinitas, como no último exemplo. Quando tiverem a consola do GHCi aberta digitem [1..] e verão o interpretador a tentar mostrar todos os número (até que você digitem 'Ctrl+C'). Existem algumas funções interessantes sobre listas, como por exemplo map, filter e foldl. Ficam aqui alguns exemplos. vezes2 n = n * 2 -- aplica a função 'vezes2' a todos o elementos de uma lista duplica :: [int] -> [int] duplica l = map vezes2 l -- ou alternativamente duplica l = map (* 2) l -- filtra todos os elementos diferentes de 0 (usa a função 'isZero' definida anteriormente) naoZeros l = filter (not . isZero) l Podemos ver também a aplicação da composição de funções ('.'): (not . isZero) n é equivalente a not (isZero n). Sinónimos de tipos e novos tipos de dados Em Haskell podemos definir sinónimos de tipos. Por exemplo, podemos associar ao nome Par o tipo (Int,Int). Para tal usamos a declaração type. type Par=(Int,Int) Desta forma escrever Par ou (Int,Int) é a mesma coisa. No próximo exemplo as funções f1 e f2 são exactamente a mesma coisa. f1 :: (Int,Int) -> Int f1 (x,y) = x + y f2 :: Par -> Int f2 (x,y) = x + y Como já foi referido, strings em Haskell são lista de caracteres, ou seja, foram declaradas da seguinte forma: type String=[Char]. Mas podemos fazer muito mais do que definir sinónimos em Haskell. Podemos definir novos tipos através da declaração data. Por exemplo, quando fazemos a divisão de dois números o denominador não pode ser zero, caso isso acontença é um erro. Então vamos definir um tipo de dados que permite representar um inteiro e situações de erro e algumas funções que usam esse tipo. data ResDiv = Erro | Res Int divisao :: Int -> Int -> ResDiv divisao _ 0 = Erro divisao n d = Res (div n d) mult :: ResDiv -> ResDiv -> ResDiv mult Erro _ = Erro mult _ Erro = Erro mult (Res x) (Res y) = x * y -- converte um valor do tipo ResDiv para Int. -- o valor erro é considerado 0 res2int :: ResDiv -> Int res2int Erro = 0 res2int (Res x) = x Neste caso o tipo ResDiv só servia quando estivesse-mos a trabalhar com inteiros. Mas podemos generalizá-lo para qualquer tipo de dados. data ResDiv a = Erro | Res a divisao :: Int -> Int -> ResDiv Int divisao _ 0 = Erro divisao n d = Res (div n d) mult :: ResDiv Float -> ResDiv Float -> ResDiv Float mult Erro _ = Erro mult _ Erro = Erro mult (Res x) (Res y) = x * y -- converte um valor do tipo ResDiv para Int. -- o valor erro é considerado 0 res2int :: ResDiv Double -> Double res2int Erro = 0 res2int (Res x) = x No entanto nem era preciso definir-mos este tipo de dados. Já tinhamos o tipo Maybe a que faz exactamente a mesma coisa. A sua definição é a seguinte: data Maybe a = Just a | Nothing A única diferença em relação ao tipo por nós definido são mesmo os nomes. Mas também podemos ter tipos recursivos. Vejamos como definir expressões matemáticas e uma função que as avalia. data Exp a = Val a -- um numero | Neg (Exp a) -- o simetrico de uma expressao | Add (Exp a) (Exp a) -- a soma de duas expressoes | Sub (Exp a) (Exp a) -- subtraccao de duas expressoes | Mul (Exp a) (Exp a) -- multiplicacao ... | Div (Exp a) (Exp a) -- divisao ... avalia (Val x) = x avalia (Neg exp) = - (avalia exp) avalia (Add exp1 exp2) = (avalia exp1) + (avalia exp2) avalia (Sub exp1 exp2) = (avalia exp1) - (avalia exp2) avalia (Mul exp1 exp2) = (avalia exp1) * (avalia exp2) avalia (Div exp1 exp2) = (avalia exp1) / (avalia exp2) Aqui têm um pequeno tutorial de Haskell, por enquanto ainda muito básico, mas espero ir acrescentando mais informações. Qualquer dúvida que tenham é só dizer. Para terminar mostrava apenas um exemplo da função "hello world" (a sua explicação fica para outra altura...) main :: IO () main = do putStrLn "Hello World" -- ou uma que retorna 0 main :: IO Int main = do putStrLn "Hello World" return 0
  8. Rui Carlos

    Haskell - Apontamentos (U. Coimbra)

    Versão 1.16

    377 downloads

    Universidade de Coimbra Faculdade de Ciências e Tecnologia Departamento de Matemática Autor: Professor Pedro Quaresma de Almeida Conteúdo Introdução Tipos de Dados Definição de Funções Definição de Tipos Leitura e Escrita Módulos em Haskell Bibliografia
  9. Versão 2007/2008

    158 downloads

    Slides de curso introdutório à programação funcional, usando a linguagem Haskell. Universidade do Minho Programação Funcional Autor: Professora Maria João Frade
  10. Versão 2005

    643 downloads

    Resolução de um trabalho prático de Programação Funcional. Universidade do Minho Curso: Matemática e Ciências de Computação Disciplina: Programação Funcional
  11. Versão 2005-12-31

    365 downloads

    Resolução de exercícios de especificação e processamento de linguagens (expressões regulares, autómatos finitos, e gramáticas independentes de contexto). Universidade do Minho Curso: Matemática e Ciências de Computação Disciplina: Métodos de Programação III
  12. Versão 2006

    204 downloads

    Caderno de exercícios de curso introdutório à programação funcional, usando a linguagem Haskell. Universidade do Minho Programação Funcional Autores: Professora Maria João Frade, Professor Jorge Sousa Pinto
  13. João Victor Venancio

    Exercícios com strings

    Olá, gostaria que me ajudasse com essas questões, não estou conseguindo resolver. Questão 01) a) Crie um programa que faça uma codificação sobre uma sequência de caracteres iguais, substitua a sequência por !na, onde n é o número de vezes que o caractere a é repetido. Note que só é interessante comprimir sequências maiores que 3 (três). Veja o exemplo: ghci> comprime "asdffffghjjkllllpoooi" "asd!4fghjjk!4lpoooi" b) Implemente uma função que descomprima o texto resultante da função anterior: ghci> descomprime "asd!4fghjjk!4lpoooi" "asdffffghjjkllllpoooi" Questão 04) Escrever um programa que leia uma linha, a partir do teclado, e verificar se ela contém apenas caracteres alfabéticos imprimindo essa linha na tela com as palavras em ordem inversa. Caso a linha contenha algum caractere não alfabético, a função imprime primeiramente esse caractere não alfabético, e logo após uma mensagem de erro. Agradeço desde já pela anteção.
  14. gttj

    GTK não Instala

    Olá, Estou com problemas para instalar a biblioteca Cairo. Sou iniciante em Haskell. No site abaixo tento pedir ajuda para o instrutor explicando as mensagens de erro, porém até o momento sem resposta. Tenho um Win de 64 bits e baixei o gtk+-bundle_2.24.10-20120208_win32, do site http://www.geeksbr.com/2014/12/interface-grafica-com-haskell.html#more. Alguém pode me ajudar? A mensagem de erro em resumo se refere a Missing C libraries: z, cairo https://www.udemy.com/curso-haskell/learn/v4/questions/1979728 Desde já grato pela a atenção,
  15. Um artigo interessante sobre os problemas de se reutilizarem tipos primitivos em diversos contextos, para não se ter o trabalho de definir um novo. https://github.com/quchen/articles/blob/master/algebraic-blindness.md
  16. ricardo peixoto

    Árvores irregulares

    função procura :: Eq a => a -> RTree a -> Maybe [Int] que procura um elemento numa árvore e, em caso de sucesso, calcula o caminho correspondente.
  17. Serlin

    Exercício com fold

    Estou a começar a aprender Haskell, e como tal comecei a fazer alguns exercícios simples. Mas deparei-me com este que não consigo responder: Basicamente o objetivo é criar uma função getExpansion, com a assinatura getExpansion :: Eq a => Rules a -> a -> [a], que dado uma lista de regras e um elemento, devolve a respectiva expansão, ou devolve o próprio elemento numa lista se não existir expansão associada. Sendo que uma regra é um par (elemento, lista de elementos), em que à lista de elementos chamamos expansão. Por exemplo, com regras = [(1,[2,1]), (2,[0,2,1])]: ghci> getExpansion regras 1 [2,1] ghci> getExpansion regras 0 [0] Nota: a função getExpansion deve ser implementada através de uma função fold.
  18. Rafaela Soares

    listas haskell

    Oi , Neste exercício: Crie um programa que faça uma codificação sobre uma sequência de caracteres iguais, substitua a sequência por !na, onde n é o número de vezes que o caracter a é repetido. Note que só é interessante comprimir sequências maiores que 3. Lembre que uma string (sequência de caracteres) é equivalente a uma lista de caracteres. Exemplo: > comprime “asdffffghjjkllllpoooi” “asd!4fghjjk!4lpoooi” Pensei nisto: comprimir :: String -> String comprimir [] = [] comprimir (h:t) = if (h == head t) then '!' : (1 + aux t) : head else h : comprimir t where aux :: String -> Int aux (h:t) = if h == head t then 1 + aux t else 0 Mas não consigo sair daqui. Obrigada pela atenção.
  19. ccmist

    Jogo bombermam

    Olá, boa noite. Sou nova nestas andanças e sinto-me um pouco aflita e sem saber o que fazer. O problema é o seguinte, foi-me proposto a criação de um jogo e numa fase final temos de programar um bot evitando que ele morra, que se movimente sozinho, que apanhe bonus (sendo para mim uma especie de inteligencia artificial) e eu nao faço ideia como é possivel fazer isto... O jogo é o bomberman e eu agradecia a vossa ajuda!...
  20. Rafaela Soares

    Modificar um mapa

    Oi, É suposto elaborar um jogo semelhante ao bomb it. Após a elaboração da função para criar um mapa de dimensão ímpar superior a 5, sendo este 9x9: (Onde o # representa a parede, o ? o tijolo, o + as Bombs e o ! Flames) (As coordenadas estão por coluna linha, começando no 0) ######### # # # #?#?# # # ? ? # #?# # #?# # ? ? # # #?#?# # # ?? # ######### + 5 2 + 3 3 ! 5 5 Agora temos como tarefa de trabalho de grupo, criar a função move :: [String] -> Int -> Char -> [String]. O jogador varia entre 0 e 3 e os comandos serão ‘U’ (ir para cima), ‘D’ (ir para baixo), ‘L’ (ir para a esquerda), ‘R’ (ir para a direita) e ‘B’ (colocar uma bomba). Terá de ser acrescentado uma linha a descrever o estado de cada bomba colocada no mapa e uma linha a descrever o estado de cada jogador. Uma bomba é identificada pelo caracter ‘*’ sendo listada depois a sua posição, qual o jogador que a colocou, qual o seu raio de acção e quantos instantes de tempo faltam para explodir. Um jogador é identificado pelo seu dígito sendo listada depois a sua posição e os power ups que entretanto acumulou. O jogo suporta um máximo de 4 jogadores. Bombas e jogadores devem aparecer ordenados por posição e identificador, respectivamente. Considerando este mapa: ######### # # # #?# # # # ? # #?# # #?# # ? ? # # #?#?# # # ?? # ######### + 3 3 ! 5 5 * 7 7 1 1 10 0 4 3 + 1 7 7 Se o jogador o jogador 0 efectuar o comando ‘L’ o resultado será: ######### # # # #?# # # # ? # #?# # #?# # ? ? # # #?#?# # # ?? # ######### ! 5 5 * 7 7 1 1 10 0 3 3 ++ 1 7 7 Já desenvolvemos as funções que determinam se ele pode andar e se pode colocar uma bomba. Também já elaboramos o go_Left, go_Up e afins. Mas com isto só obtivemos em si a linha 0 4 3 +. Mas não sabemos como desenvolver até ao fim Obrigada pela atenção
  21. Pedro José Ferreira Silva

    Função para as coordenadas

    Boa noite pessoal. Bem, estou a escrever este post porque tenho um trabalho prático em haskell para fazer e como sou muito novato nisto ainda não pesco patavina do mesmo. Assim sendo, estou com dificuldades em gerar uma função, que dado um mapa de um jogo (é o bomberman já agora) me dê as coordenadas de cada ponto representado por um '+' do mesmo. O mapa é deste tipo: ######### # # # # #?# # # ?+ # # # # # # # ?+ # # # #?# # ######### (+,4,4) Aqui ficou um bocado mal mas pronto. A ideia é que em baixo do mapa apareçam as coordenadas dos pontos onde tem o +, neste caso ficaria como representei e por aí adiante (primeiro vem a coluna depois vem a linha). Por favor, ajudem-me, desde já obrigado!
  22. MarcoCabral

    Converter um número binário para decimal

    Oi, eu sou novo programando em haskell e estou com problema em fazer a conversão de binário para decimal. Já consegui fazer de decimal para binário como podem ver abaixo: decpbin :: Int -> String decpbin 0 = "0" decpbin 1 = "1" decpbin n = decpbin(n `div` 2) ++ show(n `mod` 2) Se poderem ajudar agradeço.
  23. Rafaela Soares

    Funções recursivas: lista com números positivos

    Oi Estou com algumas dificuldades em conseguir chegar à função deste exercício: positivos :: [Int] -> Bool que teste que uma lista só tem elementos positivos Coloquei: positivos :: [Int] -> Bool positivos [ ] = False positivos (h:t) = if h==(-h) then False else positivos t Só que não está a fazer muito sentido porque não sei como colocar o True :/
  24. Hugo.mls93

    Dúvidas de haskell para principiantes

    Boa tarde pessoal! Entrei este ano para a Uni e estou a ter uns certos problemas com Programação funcional. Não consigo perceber nada daquilo por mais que estude. Já vi tutoriais, resolvi exercícios mas estou sempre empancado, por mais que estude sinto que nunca saio do sítio. À uns anos aprendi a programar um pouco em C, VB, etc e não senti grandes dificuldades, até tive um excelente aproveitamento. Com Haskell tem sido diferente. Bem, criei este tópico para que todos os iniciantes postem as suas pequenas dúvidas de forma a nos ajudarmos uns aos outros. Aqui vai a minha: Ex.defina a função: multiplo -> testa se o número inteiro m é multiplo de n. A minha solução: multiplo :: (Int,Int)-> Bool multiplo (m,n) = if m mod n==0 then True else False qual é o problema mesmo? Já tentei simplificar, retornado o valor de 0 caso não seja multiplo e 1 caso seja (mudando em cima para Int) mesmo assim não dá. Já agora, caso quisesse colocar uma mensagem do tipo "e inteiro" como fazia? Obrigado a todos os que me puderem ajudar Cumps!
  25. Rafaela Soares

    Adicionar minutos a horas

    Oi O exercício, é o seguinte: Adicionar um determinado número de minutos a uma dada hora.´ Então, no sublime, coloquei: int_horas :: Hora -> Bool int_horas (h,m)= if (h<= 23) && (h>=0) && (m<=59) && (m>=0) then True else False soma_min:: Hora -> Int -> Hora soma_min (a,b) c = if (int_horas (a,b)== True) then (a, b+c) Mas no terminal, aparece isto e não percebo porquê: s.hs:28:62: parse error (possibly incorrect indentation or mismatched brackets) Failed, modules loaded: none. Prelude> Obrigada
×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.