Forum Pplware
[Dúvida] Algoritmo em Lisp - Versão de Impressão

+- Forum Pplware (http://forum.pplware.com)
+-- Fórum: Mais Tech (/forumdisplay.php?fid=11)
+--- Fórum: Programação e Web (/forumdisplay.php?fid=16)
+--- Tópico: [Dúvida] Algoritmo em Lisp (/showthread.php?tid=15278)



[Dúvida] Algoritmo em Lisp - cris_minims - 22-04-2013 15:23

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


RE: [Dúvida] Algoritmo em Lisp - cris_minims - 24-04-2013 16:36

Então pessoal, ninguém consegue dar uma ajudinha?