Dúvidas em Haskell

Joao-M

Membro
Oi techzianos. :001:

Fiz o seguinte programa em Haskell:

Relembrando a fórmula resolvente da equação do segundo grau, programe uma função zero1 que calcula o menor dos dois zeros, sabendo que a equação tem pelo menos um zero.
Exemplo: Main> zero1 1 (-3) (-4)
-1.0
Rapidamente criei o seguinte programa:
Código:
zero1 :: Float -> Float -> Float -> Float
zero1 a b c = (-b - sqrt(b^2 - 4 * a * c))/2*a
Quando corro o programa com os valores recomendados do enunciado, obtenho o valor desejado, mas porque qualquer motivo não consigo que o programa seja aceite pelo Mooshak. Já falei com colegas e eles não sabem o que fazer.

O professor da cadeira disse-me que estava bem programado e aconselhou-me a submeter o programa pelo Mooshak que deve dar tudo bem. Infelizmente não o fiz pois já era muito tarde e podia fazê-lo em casa.

O Mooshak não é um sistema 100% infalível, e o pior de tudo é perdermos dias à volta de um programa que está bem programado, mas que pensamos que ainda falta alguma coisa. Ainda ontem um colega meu perdeu um dia inteiro num programa que estava 100% correcto (o próprio professor admitiu), mas o sistema por capricho recusava-se a aceitá-lo.

Outra pequena dúvida. O meu professor criou o seguinte programa na aula:
Código:
divisor :: Int -> Int -> Int
divisor x 
    | mod x y == 0 = y
    | otherwise divisor x(y-1)
Contudo quando tentei fazer o mesmo em casa, obti a seguinte mensagem de erro:
Syntax error in declaration (unexpected `}', possibly due to bad layout)
Achei estranho o erro e fui ao Google e encontrei esta explicação:
ERROR "Junk.lhs" (line 4): Syntax error in expression (unexpected `}')
This problem happens because there is a closing bracket missing at the end of the line. The } symbol is used to group definitions together, and also to define records with named fields. An error like this occurs when grouping is incorrect or, if you are using records, in record syntax.
Fiquei completamente à nora com esta explicação, e só posso perguntar a um professor no início do próximo ano. Perguntei a uns colegas, mas eles não sabiam.

(Devia era fazer como o resto do pessoal e fazer os testes e projectos individuais(!) em grupo também. Já começo a entender porque existe muito engenheiro informático e programadores mal formados. :P)

Obrigado pela ajuda.
 
Esse erro das chaveta tem a ver com o alinhamento das definições das tuas funções.
Implicitamente, quando indentas o teu código, crias chavetas. Se uma linha tiver ligeiramente atrás da anterior, um bloco é implicitamente terminado com }.
 
Obg pela a ajuda.

Pois, nós tivemos esse problema antes. Mas já rescrevi o programa, está tudo (aparentemente) perfeitamente alinhado e ainda continuo a ter erro. Foi o programa que o prof. correu na aula, logo não devia dar erro sequer.

Mas lá vou tentar outra vez.

Estou a começar a detestar esta linguagem. Perco mais tempo a descobrir os truques disto, do que a aprender a matéria. :p
 
O gajo que inventou o Mooshak devia levar um tiro! :mad:
Eu também já passei por isso...

Então quando ele enpancava nos testes é que era gira lool enviar os programas por mail e tal, sem sequer saber se aquilo ia bem, enfim, ao menos por sorte nunca passei por isso :)

JoãoM, epah não confies assim tanto nos profs, eles também se enganam, e por vezes bastante mais do que deviam, mas também ah profs, e ah PROFS ;)

Quanto a isso se ele diz que está bem, e já andas a perder demasiado tempo nisso se calhar é melhor fazeres outras coisas mais importantes não sei, só uma opinião ;)

Cumpzz e boa sorte

P.S. Nunca gostei de Haskell pahhh =S xD
 
Pois, hoje foi outra.

O pessoal estava todo enrascado num programa durante uma carrada de tempo. Para fazer um história longa curta, a solução para pormos o programa a funcionar era adicionar uma linha em branco no final deste.

Se um desgraçado faltasse a aula de hoje e ninguém o avisar até amanhã (último dia de aulas) não fazem o projecto da cadeira por causa desde pequeno "truque".

Bom, siga lá mais uma ronda de WinHugs. :sad:
 
Pois, hoje foi outra.

O pessoal estava todo enrascado num programa durante uma carrada de tempo. Para fazer um história longa curta, a solução para pormos o programa a funcionar era adicionar uma linha em branco no final deste.

Se um desgraçado faltasse a aula de hoje e ninguém o avisar até amanhã (último dia de aulas) não fazem o projecto da cadeira por causa desde pequeno "truque".

Bom, siga lá mais uma ronda de WinHugs. :sad:

WinHugs? Dios Mio, não usam Linux ai?!
 
Na função divisor tens mesmo erros de sintaxe, por ex. no otherwise e na função mesmo, por ex, olhando para a assinatura da função recebes 2 Int e devolves 1 Int, porém depois na função só defines 1:

Código:
divisor :: Int -> Int -> Int
divisor x [falta aqui qualquer coisa]

Acho que o correcto será:

Código:
divisor :: Int -> Int -> Int
divisor x y
  | mod x y == 0 = y
  | otherwise = divisor x (y-1)
 
Pela tua conversa deves ser meu colega,só não falas com um prof senão quiseres eles estão lá todos os dias e podes sempre mandar mail pró moodle que algum de nós ou o guerreiro te responde de certeza!
 
Pois, hoje foi outra.

O pessoal estava todo enrascado num programa durante uma carrada de tempo. Para fazer um história longa curta, a solução para pormos o programa a funcionar era adicionar uma linha em branco no final deste.
A linha em branco no final ('\n'), não é um truque, é uma boa norma de programação! Como garantes ao compilador, que o ficheiro está completo, sem uma linha em branco?

Se estás com problemas na disciplina, segue o conselho do BlocoDaBarra, e queixa-te no fórum da mesma, no Altek, no mooshak, manda email, ou fala directamente com o professor. Não é que este fórum, não sirva para esclarecer dúvidas, mas esses problemas que tiveste já muita gente os teve. E se o desgraçado falta às aulas, e não entrega os programas a tempo, burrice dele.
 
Back
Topo