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!!

3 Responses to “Aprendiendo Lisp”

  1. Cucu dice:

    Ya vas a ver cuando aprenda un poco mas, te la voy a “menjorar” (SIC) un monton!

  2. bauna dice:

    Ya mejore la entrada. Pero no vale encontrar errores en la redacción para escaparse por la tangente.

  3. salaboy dice:

    Aguante lisp y sus parentesis, como los extranio!

Your Reply

*