Colocar Resposta 
 
Avaliação do Tópico:
  • 0 votos - 0 Média
  • 1
  • 2
  • 3
  • 4
  • 5
[Dúvida] Algoritmo em Lisp
22-04-2013, 15:23 (Esta mensagem foi modificada pela última vez a: 22-04-2013 15:24 por cris_minims.)
Mensagem: #1
[Dúvida] Algoritmo em Lisp
Olá a todos. Estou a fazer um algoritmo em lisp para ordenar uma lista sem recorrer a < ou >. Tem de ser totalmente recursivo. Para isso devo criar uma lista auxiliar, apenas com 0 e, à medida que leio a lista originar devo incrementar 1 valor nos índices correspondentes da lista auxiliar.

L->(1 3 5 )
Laux->(0 0 0 0 0 .....)

(0 1 0 1 0 1 0 0 0 ... )

Para isso usei uma função incrementa e uma função processa, mas o resultado que tenho é, para o exemplo acima: (0 0 0 0 0 1 0 0 0 .. ) ou seja, na lista auxiliar, apenas aparece incrementado o último valor da lista original.

Alguém me consegue ajudar com isto ?


Código:
;Função que incrementa um dado indice numa lista

(defun Incrementa (indice l)
          (if ( = indice 0)
               (cons ( + 1 (car l) ) (cdr l) )
          (cons (car l) (incrementa ( - indice 1) (cdr l) ) )
          )
)


;Função para processar uma lista, incrementando na auxiliar. Ainda não funciona

(defun processa (l tam)
               (cond
                    ( (null l) nil)
                    ( (null (cdr l) ) (incrementa (car l) laux ) )
                    ( t (progn
                              (incrementa (car l) laux)
                              (processa (cdr l) ( - tam 1) )
                         )
                    )
               )
  )


Obrigado
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
Colocar Resposta 


Mensagem neste Tópico
[Dúvida] Algoritmo em Lisp - cris_minims - 22-04-2013 15:23

Saltar Fórum:


Utilizadores a ver este tópico: 1 Visitante(s)