Scheme

5 respostas
R

alguem poderia me ajudar informando o que faz esse codigo?

(define (inverte-lista lis) (if (null? (cdr lis)) ;se chegou no último elemento (cons (car lis) aux) (inverte-lista (cdr lis) (cons (car lis) aux)) ) )

5 Respostas

davidbuzatto

Vish!

Será que eu lembro?
Já mexi com Lisp no mestrado.

Bem, Lisp, Scheme, e outras linguagens funcionais, trabalham com listas e seus componentes, chamados de átomos.
Vou tentar comentar seu código. Eu não conheço Scheme, então estou "googlando" para ver o que cada função faz (menos car e cdr que eu lembro :D ).

// define uma função chamada lista, que recebe como parâmetro uma lista (lis)
(define (inverte-lista lis)  

    // cdr é uma função que extrai a cauda da lista, ou seja, a lista menos a cabeça (o primeiro átomo)
    // este if então verifica se a cauda é vazia, ou seja, se já consumiu tudo até o último elemento
    // de onde vc tirou esse código? acho que está errado aqui, nunca vai entrar no if se a lista tiver elementos...
    (if (null? (cdr lis))   ;se chegou no último elemento  

        // insere o car da lista em aux
        (cons (car lis) aux)  

        // chama recursivamente a função inverte lista, passando o cdr da lista e o car + aux como parâmetro. 
        // pq usou cons de novo????
        (inverte-lista (cdr lis) (cons (car lis) aux))  
    )  

) // fim da definição da função

Acho que esse código tem uns errinhos, não tem não?

R

na verdade preciso de um codgio que inverta recursivamente os elemento de uma lista encadeada. e depois de hora pensando nao encontrei a soluçao. ai procurei na net e encontrei esse codigo entao nao sei se ta certo ou errado entende.?
mas vc conseguiria me ajudar a inverter os elementos de uma lista encadeada simples recursivamente?
obrigado!

davidbuzatto

Mas é em Scheme?

R

pode ser em c java c++ qualqueer coisa do genero

davidbuzatto

Lição de casa???
Bem, se outra pessoa quiser ajudar, fique a vontade… Eu aqui baixando o Scheme p/ ajudar e só agora descubro que é lição de casa…
É o sono…

Criado 5 de outubro de 2010
Ultima resposta 6 de out. de 2010
Respostas 5
Participantes 2