Search the Community
Showing results for tags 'haskell'.
-
Boas malta, Estou com um problema no ghci (penso eu), usando o vscode. No fim de interpretar o programa é suposto, no terminal aparecer "Main>" certo? É que no meu terminal volta a aparecer "ghci>" ou seja, não consigo testar as funções. obrigado D:\Universidade\23-24\PF>ghci Q50.hs GHCi, version 9.0.1: https://www.haskell.org/ghc/ :? for help [1 of 1] Compiling Q50 ( Q50.hs, interpreted ) Ok, one module loaded. ghci>
-
Estou com dúvidas em um exercicio onde tenho dado voltas e voltas e gostava de saber se alguem me podia ajudar. Tenho um exercicio onde duas pessoas vão se encontrar, nos vamos ter que indicar a hora e os minutos em que a primeira pessoa se encontrou e a hora e os minutos em que a segunda pessoa se encontrou. Se encontrassem numa duração entre 59 minutos o primeiro iria dizer "Passaram apenas 59 minutos" e outro "De facto!" Se entrassem numa duração de 1 hora e 1 minuto o primeiro iria dizer "Passaram apenar 61 minutos" e outro " "Queres dizer, 6 horas e 7 minutos? Sendo que temos que usar esta função: dialogo :: Int -> Int -> Int -> Int -> (String, String) Exemplo : Exemplo 1 dialogo 7 58 14 5 == ("Passaram apenas 367 minutos!","Queres dizer, 6 horas e 7 minutos?!") Exemplo 2 dialogo 2 1 2 48 == ("Passaram apenas 47 minutos!", "De facto!") Se alguem me poder ajudar, posso mandar o documento do exercicio, obrigado!
-
Bom dia, será que algum me pode ajudar? sou novo nestas coisas e estou a fazer um trabalho(jogo BlockDude) em haskell para a licenciatura, que esta dividido em 4 tarefas sendo a 1ª a validação de um potencial mapa: type Coordenadas = (Int,Int) data Peca = Bloco | Porta|Caixa|Vazio type Mapa [[Peca]] o objetivo desta tarefa é implementar o par de funçoes constroiMapa:: [(Peca, Coordenadas)]->Mapa e desconstroiMapa:: Mapa-> [(peca, Coordenadas)] em que tem um mapa tipo matriz de 4x7.
-
olá!! Sou iniciante na linguagem Haskell e pesquisando listas de exercícios para praticar e entender mais me deparei com essa questão: Suponha que tenhamos uma lista de inteiros e que desejamos ordenar seus elementos de acordo com suas ocorrências. Isto é, teremos os elementos mais raros posicionados primeiro e os elementos mais frequentes por último. Exemplos: [4,4,2,1,3,3,2,4,3,4] -> [1,2,3,4] [5,3,5,3,5,3,7,1,3,1,3,5] -> [7,1,5,3] Alguém pode me ajudar a como desenvolver ela. obs: penso que deva ser criada uma função que compare os elementos da lista verificando quais são iguais(duplicados) e em seguida ordenar pela quantidade de ocorrências, mas não sei estruturar bem essa ideia.
-
Defina a função filtraAplicaFold :: (a->b) -> (a->Bool)->[a]-> tal que (filtraAplicaFold f p xs) é uma lista obtida aplicando a função f aos elementos de xs que satisfazem o predicado p usando a função foldr. Por exemplo, filtraAplicaFold (4+) (<3) [1..7] == [5,6] Codigo testado, mas que esta dando problema: filtraAplicaFold :: (a->b) -> (a->Bool)->[a]-> filtraAplicaFold [] [] = True filtraAplicaFold _ [] = False filtraAplicaFold [] _ = False filtraAplicaFold (f:fs) ((a,b):vals) = (f a b) && (filtraAplicaFold fs vals)
-
Usando o foldr, defina a função descompactaFold :: [(a, b)] -> ([a], ) que transforma uma lista de pares ordenado em um par ordenado onde o primeiro elemento ´e uma lista dos primeiros componentes dos pares ordenados e o segundo elemento é uma lista dos segundos componentes dos pares ordenados. descompactaFold [ ( 1 , 2 ) , ( 3 , 4 ) , ( 5 , 6 ) , ( 4 , 5 ) ] == ( [ 1 , 3 , 5 , 4 ] , [ 2 , 4 , 6 , 5 ] ) descompactaFold [ ( 1 , 2 ) , ( 3 , 4 ) , ( 5 , 6 ) , ( 4 , 5 ) , ( 5 , 6 ) ] == ( [ 1 , 3 , 5 , 4 , 5 ] , [ 2 , 4 , 6 , 5 , 6 ] ) Código testado, porem não funciona: descompactaFold :: [(a, b)] -> ([a], ) descompactaFold f v [] = v descompactaFold f v (x:xs) = f x (descompactaFold f v xs)
-
A função duplicarFold :: String -> String repete duas vezes cada vogal (letras 'a', 'e', 'i', 'o', 'u' minúsculas ou maiúsculas) numa cadeia de carateres; os outros carateres devem ficar inalterados. Por exemplo, duplicar "Ola, mundo!"== "OOlaa, muundoo!" Da forma que fiz não esta funcionando: duplicarFold :: String -> String duplicarFold xs = foldr (\x acc-> if elem x vogais then else ) [] xs where vogais = "aeiouAEIOU"
-
Qual é o TIpo da função abaixo? Sem a ullização do comando :t, mostre como você obteve esses tipos. Identifique as classes dos parâmetros polimórficos. Caso não seja possível determinar o tipo, explique o porquê. Apresente uma entrada e a saída associada de forma a não retornar uma função de alta ordem. map.((.) (foldr (++) (foldr (++) [] [[1], [2], [4,5,6], [3]])))
-
Boas, Estou ultimamente a aprender programação funcional e deparei-me com um exercício que diz o seguinte (no que suponho seja terminologia académica): mostre que uma lista em compreensão com geradores duplos pode ser descrita usando geradores simples. Sugestão: use a função concat e uma compreensão dentro de outra. É dado o exemplo de [(x, y) | x <- [1, 2, 3], y <- [4, 5, 6] ] o meu problema aqui é, como raio é que se encaixa sintacticamente uma lista por compreensão aninhada dentro de outra? o exemplo descreve uma lista de tuplos (x, y) com aqueles geradores para cada variável. Concat recebe uma lista de listas. Perdi-me algures no meio, suponho. Não tenho qualquer exemplo de tal situação, estou a seguir o livro "Learn you a Haskell for great good" e paralelamente a frequentar uma cadeira de programação funcional com haskell que me fornece outro tipo de exercicios, admitidamente mais fáceis. Alguma ideia? (Edit: movido de outro fórum para aqui)
-
Boas, Estou ultimamente a aprender programação funcional e deparei-me com um exercício que diz o seguinte (no que suponho seja terminologia académica): mostre que uma lista em compreensão com geradores duplos pode ser descrita usando geradores simples. Sugestão: use a função concat e uma compreensão dentro de outra. É dado o exemplo de [(x, y) | x <- [1, 2, 3], y <- [4, 5, 6] ] o meu problema aqui é, como raio é que se encaixa sintacticamente uma lista por compreensão aninhada dentro de outra? o exemplo descreve uma lista de tuplos (x, y) com aqueles geradores para cada variável. Concat recebe uma lista de listas. Perdi-me algures no meio, suponho. Não tenho qualquer exemplo de tal situação, estou a seguir o livro "Learn you a Haskell for great good" e paralelamente a frequentar uma cadeira de programação funcional com haskell que me fornece outro tipo de exercicios, admitidamente mais fáceis. Alguma ideia?
-
Boa Tarde, preciso aqui de uma ajuda tenho estes dois tipos de dados e estou a tentar fazer estas 3 funções ate agr tenho este codigo se alguem me conseguir dar uma ajuda Data Cor = Vermelho | Azul | Cinzento deriving Show Data Carro = Carro cor (Maybe Carro) deriving Show Basicamente pode ir havendo um carro dentro do outro 1 - Recebe um tipo de dado carro e devolve uma lista com todas as cores Lista_Cores :: Carro -> [Cor] Lista_Cores Carro c (Nothing) = [c] Lista_Cores Carro c (Car) = [c] : Lista_Cores Car 2 - Recebe um cor um tipo de dado carro e devolve numero de carros com cor = cor Num_Cor :: Cor -> Carro -> Int Num_Cor cor Carro c (Nothing) = if cor == c then 1 else 0 Num_Cor cor Carro c (Car)= if cor == c then 1 + Num_Cor cor Car 3 - O tipo de dados Cor ser Eq gerada pelo par Vermelho == Azul nao percebo bem esta parte de ser gerada por este par Desde ja Obrigado
-
Boa tarde Tenho aqui um problema para o complicado de IO, vamos por partes portanto tenho de ir recebendo dados dos utilizadores e posso receber Texto, negrito ou Italico sempre que for um desses continua a receber quando for outra coisa qualquer para da a resposta que basicamente é fazer o putStrLn das coisas que recebi por exemplo se recebi Italico Negrito Texto tenho de fazer o putStrLn de Texto Negrito Italico Ora a minha ideia era fazer assim: receber :: IO() calculadora = do expressao <- getLine if expressao == ""Texto || expressao == "Negrito" || expressao == "Italico" then //Aqui a minha ideia era colocar a expressao numa lista masnao estou a ver como posso faze lo receber()//Chama outra vez a funçao else //Aqui escreve a lista que fui criando mas tenho muitas duvidas como e que posso fazer isto. Desde já Obrigado
-
Olá a todos, sou meio iniciante em haskell e estou em dúvida nesse exercicio. 1) A função min no Haskell retorna o menor entre dois números, por exemplo, min 4 5 = 4 . Crie um tipo min com um campo inteiro, que seja instância de Ord, Eq e Show (deriving) .Crie uma instancia de Monoid para min (maxBound representa o maior inteiro existente no Haskell) .Quanto vale a expressão Min(-32) <> Min(-34) <> Min(-33)? . Explique sua escolha para o mempty Quem puder me ajudar ficarei agradecido.
-
Boa Tarde Tenho aqui um duvida nesta função ghci> transposta ["azul", "verde", "roxo"] ["avr","zeo","urx","ldo","e"] ghci> transposta ["verde", "encarnado"] ["ve", "en", "rc", "da", "er", "n", "a", "d", "o"] Tenho algumas ideias mas tenho sempre o proble de como fazer o resto de x Transposta [[a]] -> [[a]] Trnsposta [] = [] Trnsposta (x:xs) = take 1 x : transposta xs Poderia fazer o drop 1 x para o elemento mas nao estou a ver como
-
Boa tarde tenho este tipo de dados que pode ter uma subarvore e tenho a seguite duvida data HTML = Div [html] | Texto String | Negrito String quero fazer uma funcao que passa o o Texto para negrito e tenho este codigo que nao sei se esta correto converter _ _ = _ _ converter Texto x = Negrito x e tenho de fazer uma propriedade que verifique que a arvore principal é mais profunda que as subarvores e a minha duvida é como aceder as sub arvores tenho: (supoe-se que tenho uma funcao profundidade) prop_maior_arvore :: HTMl -> Property prop_maior_arvore html = profundidade html > profundidade (tenho aqui a duvida de como aceder a subarvore de html) Desde já obrigado
-
Boa tarde Tenho este tipo de dados: data exp = Variavel Char | Inteiro Int | Mais Exp Exp | Vezes Exp Exp para escrever isto tipo de expressao 3(x+2y) let expr = Vezes (Inteiro 3) (Mais (Variavel 'x')(Vezes (Inteiro 2) (Variavel 'y'))) e agr tenho de fazer uma funcao que de o comprimento da expressao o comprimento e dado pelo numero de operadores (Mais e Vezes) ghci> comprimento expr 3 Como posso fazer esta funcao ? desde ja obrigado
-
Boa Noite Estou aqui com dúvidas em dois exercícios. Um é encontrar um elemento numa lista para o qual o predicado seja verdadeiro tenho duas formas, mas não sei se estão corretas: -- 1ª Forma encontra predicado " " = Nothing encontra predicado (x:xs) |predicado x == True = x |otherwise encontra predicado xs -- 2º Forma encontra predicado lista = let lista = filter predicado lista lista!!0 na segunda forma não sei como posso devolver a posição 0 O segundo exercício é dividir uma string numa lista de string de tamanho k Exemplo: > Fatias 3 "olalisboa" ["ola","lis","boa"] Se não for uma divisão certa a última string pode ter mais um ou menos 1 elementos Alguém me pode dar uma ajuda nestes exercícios? desde já Obrigado
-
Boa Tarde Estou aqui com uma duvidas nesta parte do haskell estou a criar um tipo de dados: data avalia deriving (Show) e quero criar uma funcao de soma deste tipo( (soma):: avalia -> avalia -> avalia) para fazer: ghci> :t cont3 soma cont 1 cont 3 soma cont 1 :: avalia mas sinceramente nao estou a perceber nem como se faz nem o objetivo quem puder ajudar com uma explicaçao e com uma ajuda neste caso Desde ja obrigado
-
Boa tarde tenho este código muito simples mas que me esta a dar erros alguém me consegue explicar porque? func :: (Char,Integer) -> Double func tuplo = (o + 452 * i) where o = (tuplo!!1) i = (elemIndices tuplo!!0 "ABCDEFGHIJKL")!!0 esta a dar me erro basicamente nas especificações das duas variáveis: • Couldn't match expected type ‘[a]’ with actual type ‘(Char, Integer)’ • In the first argument of ‘(!!)’, namely ‘tuplo’ In the expression: (tuplo !! 1) In an equation for ‘o’: o = (tuplo !! 1) • Relevant bindings include o :: a (bound at t3_fc48542.hs:10:9) aparece o mesmo para a especificação do i Desde já Obrigado
-
Boa tarde tenho aqui uma duvida tenho esta lista [1,2,3] como é que posso eliminar um elemento da lista pelo índice? desde já obrigado
-
Bom Dia Tenho aqui duas duvidas simples mas que nao estou a conseguir resolver e secalhar ate existe uma função para isto, é basicamente dividir uma lista em tuplos de dois. por exemplo [1,2,3,4,5,6] fica [(1,2),(3,4),(5,6)] alguma ideia ? e o outro é ir buscar o indicie de um elemento de uma string tenho 2 e quero saber o índice dele na srtring"1234" Desde Já obrigado
-
Ola outra vez estou aqui com um problema tenho este código: movel :: [Char] -> Char movel_2 [] = " " movel_2 (x:xs) | x!!0 == "2" = "abc" | x!!0 == "3" = "def" | x!!0 == "4" = "ghi" | x!!0 == "5" = "jkl" | x!!0 == "6" = "mno" | x!!0 == "7" = "pqrs" | x!!0 == "8" = "tuv" | x!!0 == "9" = "wxyz" |otherwise = " " à frente de cada linha depois é para fazer a chamada recursiva mas por enquanto assim já me esta a dar um erro (Couldn't match type ‘Char’ with ‘[[Char]]’) supostamente penso que agr o erro seja por causa da comparação alguém me pode explicar sff é para receber uma coisa assim ["2","33","2"] entao o x primeiro vai ser o 2 e o x!!0 tambem dois estou a por a primeira posição porque podem aparecer 22 Desde Já Obrigado
-
Boa Tarde Quero agradecer desde já a ajuda que me teem dado nesta linguagem que nao é nada fácil ainda estou a tentar perceber muita da sintaxe e a principal duvida que estou a ter agr é nas funções queria ter varias funções num ficheiro compilar esse ficheiro e dps poder chamar cada uma das funções com os seus parâmetros por exemplo: soma :: Int -> Int soma x let resultado = [ x + y | y <- [0..100]] show resultado e dps no terminal fazer: > soma 3 Desde já Obrigado
-
Boa Tarde Tenho aqui uma duvida eu tenho um numero e tenho a lista x que vai do 1 ate esse numero [1..numero] e a lista y que vai do numero ate ao 0 [numero..0] e quero percorrer as duas e ir somando e ver quando dava o numero quando der fazia o show do (x,y) estava a tentar fazer do género: numero =100 [if x+y == numero then let resultado = (x,y) |x<-[1..numero] y<-[numero]] mas o if nao me esta a dar para por ali e nao me estou a lembrar de outra maneira de fazer isto. Desde já Obrigado
-
Boas Tenho aqui uma duvida tenho este código: [x + y | x<-[6,7,8], y<-[1,2,3]] o que isto vai fazer é a cada x somar todos os numero da lista y e eu quero é que o 6 some com o 1 o 7 com 2 e o 8 com o 3 ficando [7,9,11] alguém me pode dar uma ajuda como fazer isto? Desde já Obrigado