Jump to content
lesiano

Dúvida em recursividade

Recommended Posts

lesiano

Boas;

invertecpb :: Tabuleiro -> Tabuleiro
invertecpb [[]] = [[]]
invertecpb tab@(h:t) = if (verificartab tab) then invertecpb novotab
                        else tab
  where novotab = sndmapp((mappcorreccao tab)++([(sacaumq (sndmapp t) 1)]))

Esta função é recursiva se entrar no if. ( verificartab é uma função q retorna um bool ). No entanto, compila mas ñ apresenta nenhum resultado.

Caso retire a recursividade, ela funciona na perfeição. Isto é, devolve-me o tabuleiro original aplicado pelas funções sndmapp e mappcorreccao mais o q está à frente em novotab.

PS: Já tentei fazer a recursividade ñ com o novotab mas com "sndmapp((mappcorreccao tab)++([(sacaumq (sndmapp t) 1)]))" e tb ñ dá.

É mt importante, estou a acabar uma parte do trabalho, mas ñ consigo enquanto ñ tiver isto.

Obg.

Share this post


Link to post
Share on other sites
Betovsky

Com o código que puseste não dá para ver qual será o motivo. Mas para não estar a aparecer nenhum resultado, há 2 hipóteses.

Ou o teu código demora muito a processar e o interrompes antes de mostrar o resultado, ou então, a tua função invertecpb diverge, isto é, fica num ciclo infinito.


"Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !"

Sign on a computer system consultant's desk

Share this post


Link to post
Share on other sites
lesiano

Para ter a certeza q ñ entrava num ciclo infinito, eu tinha feito:

where novotab = sndmapp((mappcorreccao tab)++([(sacaumq (sndmapp t) 1)]))++[[]]++[[]]+[[]]+[[]]+[[]]

já que isto é suficiente para ele entrar no else. Mas continua a ñ dar nada.

Tal como já disse, tb experimentei:

then invertecpb (sndmapp((mappcorreccao tab)++([(sacaumq (sndmapp t) 1)])))

e nada!

Share this post


Link to post
Share on other sites
Betovsky

Como é que adicionar listas vazias faz entrar no else?

Mostra mais informação senão nós não conseguimos ver o que está a acontecer.

Presumo que o Tabuleiro seja listas de listas.

Mas o que faz o verificartab?

E o sndmapp, mappcorreccao, sacaumq?

Pelo nome das funções não adivinhamos.

Em relação a usares no passo recursivo com ou sem o novotab é indiferente.

E o seguinte código

invertecpb :: Tabuleiro -> Tabuleiro
invertecpb [[]] = [[]]
invertecpb tab@(h:t) = if (verificartab tab) then novotab
                        else tab
  where novotab = sndmapp((mappcorreccao tab)++([(sacaumq (sndmapp t) 1)]))

Já mostra algo? Se sim então é provável que o problema esteja no verificartab e estar sempre a entrar no then...


"Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !"

Sign on a computer system consultant's desk

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.