¿Cómo hacer que la salida de la lista en LISP sea más agradable?

Declaré la siguiente lista en lisp:

  (defvar car-owners-2 (list (list 'yaakov (list 'volvo 100000.0)) 
                             (list 'moshe (list 'vw 75000.0)) 
                             (list 'rachel (list 'mazda 60000.0)) 
                             (list 'sarah (list 'volvo 100000.0)) 
                             (list 'david  (list 'renault 50000.0))
                             (list 'leah  (list 'vw 75000.0))))

y cuando quiero verlo desde el archivo de escucha, obtengo este desagradable resultado:

 CL-USER 19 : 6 > car-owners-2
    (((QUOTE YAAKOV) (QUOTE (# 100000.0))) ((QUOTE MOSHE) (QUOTE (# 75000.0))) 
    ((QUOTE RACHEL) (QUOTE (# 60000.0)))   ((QUOTE SARAH) (QUOTE (# 100000.0)))
    ((QUOTE DAVID) (QUOTE (# 50000.0)))    ((QUOTE LEAH) (QUOTE (# 75000.0))))

¿Cómo puedo hacer que la salida sea normal? ¿Y por qué en lugar de nombres imprime #? Quiero que la salida sea así:

((YAAKOV (VOLVO 100000.0)) (MOSHE (VW 75000.0)) (RACHEL (MAZDA 60000.0))...)

Gracias. Yo uso LispWorks 6.0.1

preguntado el 12 de junio de 12 a las 15:06

En clozure CL y mi lispworks personal 6.0.1, la salida parece normal... ¿Escribiste mal algo? -

no... la salida que se muestra aquí se copió de mi archivo de escucha... -

2 Respuestas

Tal vez cree la misma lista de esta manera:

> '((yaakov (volvo 100000.0))
    (moshe (vw 75000.0))
    (rachel (mazda 60000.0))
    (sarah (volvo 100000.0))
    (david (renault 50000.0))
    (leah (vw 75000.0)))

Respondido el 12 de junio de 12 a las 16:06

Muchas gracias, pero tenías razón antes. Da una buena salida. Pero seguro que hay algún problema con la carga de .lisp en el oyente de lispworks... Cada vez que hago un cambio en mi archivo .lisp tengo que volver a abrir lispworks y luego cargarlo... muy molesto. - זאבי כהן

puede volver a evaluar la expresión modificada, luego no tiene que volver a cargar. - Juanito Fatas

@זאבי כהן: O, mejor, use defparameter en lugar de defvar. Con defparameter, establece el valor en cada evaluación, con defvar solo si la variable no tiene un valor. - vatina

CL-USUARIO 19 : 6 >

Primero saldría del depurador.

Este sería el aviso habitual:

CL-USUARIO 19 >

La 19 dice que es la forma 19 leída. El : 6 anterior significa que está en un depurador y se lee la sexta forma en el depurador.

CL-USUARIO 19 : 6 > :arriba

:top te lleva al nivel superior.

Luego verifique el valor de variables como *print-level* y *print-length*.

CL-USER 12 > (setf *print-level* 2)
2

CL-USER 13 > (list (list 'yaakov (list 'volvo 100000.0)) 
                             (list 'moshe (list 'vw 75000.0)) 
                             (list 'rachel (list 'mazda 60000.0)) 
                             (list 'sarah (list 'volvo 100000.0)) 
                             (list 'david  (list 'renault 50000.0))
                             (list 'leah  (list 'vw 75000.0)))
((YAAKOV #) (MOSHE #) (RACHEL #) (SARAH #) (DAVID #) (LEAH #))

CL-USER 14 > (setf *print-level* nil)
NIL

CL-USER 15 > (list (list 'yaakov (list 'volvo 100000.0)) 
                             (list 'moshe (list 'vw 75000.0)) 
                             (list 'rachel (list 'mazda 60000.0)) 
                             (list 'sarah (list 'volvo 100000.0)) 
                             (list 'david  (list 'renault 50000.0))
                             (list 'leah  (list 'vw 75000.0)))
((YAAKOV (VOLVO 100000.0)) (MOSHE (VW 75000.0))
 (RACHEL (MAZDA 60000.0)) (SARAH (VOLVO 100000.0))
 (DAVID (RENAULT 50000.0)) (LEAH (VW 75000.0)))

Respondido el 12 de junio de 12 a las 20:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.