Forum Pplware

Versão Completa: [Dúvida] Algoritmo em Lisp
Está de momento a ver uma versão reduzida do nosso conteúdo. Ver versão completa com o formato adequado.
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
Então pessoal, ninguém consegue dar uma ajudinha?
URL's de Referência