Ir para o conteúdo
Mig_coiso

Bingo_randomRIO (Ajuda)

Mensagens Recomendadas

Mig_coiso    0
Mig_coiso

Boas,

Alguem me consegue ajudar com este pedaço de código que me devolve o seguinte erro,

hs:13:28:

    The last statement in a 'do' construct must be an expression

Failed, modules loaded: none.

bingo :: IO()
bingo = do l <- acumulaValores []
           putStr (show l)

acumulaValores :: [int]->IO[int]
acumulaValores ns = if length ns == 90 then return ns
                    else do a <- randomRIO ((1::Int),(90::Int))
                                  let nl =if (elem a ns )then ns
                                         else a:ns
                                  in acumulaValores nl

Agradeço desde já a atenção

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Baderous    31
Baderous

Eu costumo usar a notação com chavetas e ponto e vírgula, para ajudar a indentar:

bingo :: IO()
bingo = do { l <- acumulaValores [];
             putStr (show l)
           }

acumulaValores :: [int]->IO[int]
acumulaValores ns = if length ns == 90 then return ns
                    else do { a <- randomRIO ((1::Int),(90::Int));
                              let nl = if (elem a ns) then ns else a:ns;
                              in acumulaValores nl
                            }

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Betovsky    2
Betovsky

Se estiver a ver bem:

acumulaValores ns | length ns == 90 = return ns
                  | otherwise = do a <- randomRIO ((1::Int),(90::Int))
                                  let nl =if (elem a ns ) then ns else a:ns
                                  acumulaValores nl

Dentro da notação "do" só escreves "let".

Neste caso a função acumulaValores já retorna um IO, caso contrário teria que colocar um "return".

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Mig_coiso    0
Mig_coiso

bingo :: IO()
bingo = do { l <- acumulaValores []
             putStr (show l)
           }


acumulaValores :: [int]->IO[int]
acumulaValores ns | length ns == 90 = return ns
                  | otherwise = do{ a <- randomRIO ((1::Int),(90::Int))
                                  let nl =if (elem a ns ) then ns else a:ns
                                  acumulaValores nl
                                 }

Continua a devolver o mesmo erro ... o pior é que nao consigo encontrar nada sobre este erro

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Betovsky    2
Betovsky

Bah! Obrigaste a abrir o ghci :)

Isto compila e funciona.

import Random

bingo :: IO ()
bingo = acumulaValores [] >>= print


acumulaValores :: [int]->IO[int]
acumulaValores ns | length ns == 90 = return ns
                  | otherwise = do
                       a <- randomRIO ((1::Int),(90::Int))
                       let nl = if (elem a ns ) then ns else a:ns
                       acumulaValores nl

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade