Archive for the ‘Lisp’ Category

Aprendiendo Lisp


2009
02.13

Ya que  por todos lados dicen que para ser un groso programador hay que saber Lisp con mi amigo Cucu nos pusimos a aprenderlo.

El primer reto fue implementar RLE (Run Lentgth Encoding), o sea dada una lista

rle '(1 1 1 2 2 3) = ((1 3) (2 2) 3)

A mi no gustó que Cucu haya definido el tipo de dato es distinto dependiendo de si hay o no repeticiones pero no iba a discutir un detalle tan nimio.
Y sin más acá les dejo mi solución:

(defun make-elem (c n)
  (cond ((eq 1 n) (list c))
    (t (list (list c n))))
  )

(defun acum (c n r)
  (cond ((null r) (make-elem c n))
    ((eq c (first r)) (acum c (+ 1 n) (rest r)))
    (t (append (make-elem c n) (rle r))))
  )

(defun rle (l)
  (cond ((null l) nil)
      (t (acum (first l) 1 (rest l))))
)

PD: Mi solución es más elegante que de Cucu, espero que se anime a postear la suya o al menos que pique en el amor propio para mejorarla!!