@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.
↧