Empuje lisp común de la función

Tengo las siguientes funciones comunes:(aggregate line1 line2) y(queuer data result).

queuer debe empujar en el resultado, ya sea los valoresline1 yline2 si tienen el primer campo diferente, o el agregado de esas 2 líneas si tienen el primer campo igual.

No sé por qué no cambia mi lista de resultados.

Nota: Estoy inicializando la lista de resultados con un(push (pop data) result) Para tener el primer elemento allí. Las 2 listas son listas anidadas de 1 profundidad.(("1" "text") ("2" "text") (...)).

(defun aggregate (line1 line2)
  (progn
    (list 
     (nth 0 line1)
     (nth 1 line1)
     (nth 2 line1)
     (concatenate 'string (nth 3 line1) ", " (nth 3 line2))
     (concatenate 'string (nth 4 line1) ", " (nth 4 line2)))))

(push (pop x) y)

(defun queuer (data result)
  (loop do
       (let ((line1 (pop data))
             (line2 (pop result)))
         (if (equal (first line1) (first line2))
             (progn
               (push (aggregate line1 line2) result)
               (print "=="))
             (progn
               (push line2 result)
               (push line1 result)
               (print "<>"))))
       while data))

Gracias por cualquier información.

Respuestas a la pregunta(4)

Su respuesta a la pregunta