Quantcast
Channel: Tópicos
Viewing all articles
Browse latest Browse all 14700

Dúvidas de haskell para principiantes

$
0
0
@Hugo.mls93, O teu Haskell-fu de facto anda em baixo no que diz respeito à sintaxe. Vamos lá falar um pouco sobre o que se passa. No caso de primUlt, é-te dito que essa função recebe uma lista e devolve um par com o primeiro e último elementos da lista referida. Vejamos a assinatura que deste a esta função: primUlt :: [Int] -> Int -> Int Vou ler isto por ti: primUlt é uma função que recebe uma lista de inteiros, um inteiro e devolve um inteiro. Problema: não foi pedido nada disto. Para começar, tens ali um argumento a mais, não devolves nenhum par e, para terminar, nunca ninguém falou em Ints em lado nenhum. A assinatura correcta da função seria: primUlt :: [t] -> (t,t) Ou seja, primUlt recebe uma lista de um tipo de dados t e devolve um par do tipo (t, t). Muito mais simples, expressivo e genérico. De seguida, ainda na primUlt, tens outro erro: quando tentas fazer pattern matching de listas (onde usaste [x:xf]) não se utilizam [] mas sim (). O código final seria, portanto: primUlt :: [t] -> (t,t) primUlt (x:xs) = (x, last xs) Vou deixar-te pensar um pouco nas outras duas funções e, se quiseres, vamos resolvendo aqui os problemas que elas têm. Começa por ler bem o que é suposto elas fazerem e pensa nos tipos de dados envolvidos. Fico a aguardar a tua resposta.

Viewing all articles
Browse latest Browse all 14700