En Common Lisp, ¿cómo puedo anular la representación de cadena predeterminada de una clase CLOS para que las llamadas a format
o princ
impriman algo inteligible, incluso cuando los objetos de esa clase están incrustados en otros tipos, como listas o matrices?Lisp: ¿Cómo sobrescribir la representación de cadena predeterminada para la clase CLOS?
Por ejemplo, si llamo a (format t "~a~%" x)
cuando x contiene una instancia de mi clase de solución, quiero que imprima algo como #<SOLUTION genes: #(1 2 3) scores: #(4 5) rank: 6>
en lugar de .
Hasta ahora, todo lo que he logrado averiguar es escribir funciones personalizadas para manejar estructuras de impresión que sé que contendrán instancias de esta clase, pero esto es tedioso. ¿Seguramente Lisp proporciona alguna forma de obtener esta funcionalidad gratis?
esto era lo que necesitaba. Como pregunta estilística, ¿cuál es la "mejor" forma de imprimir en el flujo pasado dentro de este método? Actualmente estoy usando 'format', pero parece extraño llamar a la función que bien podría estar llamando a este método. – sadakatsu
'format' no llamará a su método recursivamente por sí mismo, eso es algo que tendría que hacer. Además, muchos, muchos proyectos CL tienen ejemplos de métodos 'print-object'. Navegue a través de ellos para ver cómo otros proyectos típicamente los definen. – Xach