2009-05-20 33 views
14

Esta pregunta probablemente tiene una respuesta embarazosamente simple, pero ¿hay una forma correcta de formatear/dibujar árboles en Common Lisp? Probé algunos libros y busqué en Google, pero el problema parece estar entre las grietas de los términos de búsqueda.Dibujando árboles en Common Lisp

¡Gracias de antemano!

Respuesta

26

¿Qué tipo de árboles es lo que quieres dibujar?

SDRAW dibuja estructuras de células contra un terminal. Similar: Draw Cons Tree.

Si tiene McCLIM, CLIM o una máquina Lisp, puede llamar a la función CLIM CLIM:FORMAT-GRAPH-FROM-ROOT o CLIM: FORMAT-GRAPH-FROM-ROOTS.

Si usa LispWorks, hay un graph pane.

Si desea dibujar plantas, utilice este: L-Lisp.

plant drawing

+1

Impresionante, SDRAW era exactamente lo que estaba buscando: una forma clara de representar las células cons anidados. Gracias de nuevo. – wvoq

+0

QUE - AN - AWESOME - RESPUESTA. Guau. No respondiste solo a OP, sino a toda una secuencia de buscadores de Google. – MaiaVictor

+1

Otra opción es (ql: quickload: draw-cons-tree) – Baggers

4

Si no encuentra una solución mejor, me inclino a emitir un archivo .dot y luego alimentarlo a una de las herramientas Graphviz (como dot). El formato de archivo es realmente simple, y las herramientas pueden generar una variedad de formatos que incluyen PNG, SVG, PostScript e incluso mapas de imágenes (para crear gráficos clicables en páginas web).

Este enfoque probablemente solo le sirva si quiere estos gráficos para su propio uso (por ejemplo, depuración) o los está generando en un servidor. Llamar a una herramienta separada en una aplicación cliente puede tener problemas de uso y/o licencia.

Esto no es realmente una solución específica de Common-Lisp, pero he utilizado este enfoque desde algunos idiomas en el pasado.

+0

Hola, muchas gracias por su respuesta. Esperaba imprimir directamente en la consola, pero tu sugerencia parece mucho más flexible para árboles grandes. ¡Gracias de nuevo por tu tiempo! – wvoq

1

he utilizado lisp2dot (un script Awk que genera comandos de punto) en los últimos años en las aplicaciones de GP pero en la actualidad no parece funcionar. Cada vez que lo paso con una expresión Lisp válida, devuelve archivos Dot extraños con mensajes de error sin sentido. Sin embargo, vale la pena mencionar.

+0

Tuve la oportunidad de comprobar [lisp2dot] (http://www.cs.ucl.ac.uk/staff/W.Langdon/lisp2dot) y todavía parece estar funcionando, pero ten cuidado con los nombres de funciones y la aridad de los nodos de función que pueden ser complicados en Awk. – oakenshield1