Un Algoritmo que me gusta mucho es el quicksort, porque es un algoritmo por demás claro. Ya he escrito lo fácil que es implementarlo en haskell
Ahora le toca a lisp. Básicamente el algoritmo toma un pivot y agrupa los menores del pivot al principio y los mayores al final y aplica quicksort a estos 2 grupos. Y si la lista es vacia, ya esta ordenada.
Vamos al código:
(defun qso (l)
(cond
((null l) l)
(T (append
(qso (remove-if (lambda (a) (> a (first l))) (rest l)))
(cons
(first l)
(qso (remove-if (lambda (a) (<= a (first l))) (rest l)))
)
)
)
)
)
Funciona bien, pero Lisp es muy difícil leer si no tiene el formato habitual. Esto seria un poco mas común: https://gist.github.com/cgay/577d57b9928a16b7cbc78228730a9455
ResponderBorraro te falta tener en cuenta cuando la lista esta vacía o no entiendo. Saludos y gracias.
Borrar(cond ((null l) l) (t ...)) es lo mismo que (when l ...)
Borrar