Estoy haciendo composición de autómatas. Entonces, al final de eso, también quiero dibujar los autómatas compuestos. Entonces, ¿hay alguna biblioteca para eso en ocaml? o hay envoltorios ocaml escritos para cualquier herramienta de visualización de gráficos? He buscado en Google, pero no obtuve mucho para ocaml. ¿Algún comentario sobre ocamlgraph? Obtendré más de 100 estados en autómatas compuestos.¿Cómo visualizar/dibujar autómatas en ocaml?
12
A
Respuesta
16
Use ocamlgraph - es una biblioteca de gráficos que puede generar un archivo punto/gráfico gráfico para usted pero también puede hacer muchas otras cosas que pueden ser interesantes para manejar su autómata. La biblioteca puede hacer puntos fijos, abarcar árboles, buscar gráficos, encontrar componentes fuertemente conectados, etc., etc.
Aquí hay un ejemplo completo de algunos gráficos dirigidos con bordes etiquetados + módulo para hacer un primer módulo de profundidad de búsqueda + para crear representaciones de puntos:
(* representation of a node -- must be hashable *)
module Node = struct
type t = int
let compare = Pervasives.compare
let hash = Hashtbl.hash
let equal = (=)
end
(* representation of an edge -- must be comparable *)
module Edge = struct
type t = string
let compare = Pervasives.compare
let equal = (=)
let default = ""
end
(* a functional/persistent graph *)
module G = Graph.Persistent.Digraph.ConcreteBidirectionalLabeled(Node)(Edge)
(* more modules available, e.g. graph traversal with depth-first-search *)
module D = Graph.Traverse.Dfs(G)
(* module for creating dot-files *)
module Dot = Graph.Graphviz.Dot(struct
include G (* use the graph module from above *)
let edge_attributes (a, e, b) = [`Label e; `Color 4711]
let default_edge_attributes _ = []
let get_subgraph _ = None
let vertex_attributes _ = [`Shape `Box]
let vertex_name v = string_of_int v
let default_vertex_attributes _ = []
let graph_attributes _ = []
end)
con el que puede escribir su programa; p.ej. algo como esto:
(* work with the graph ... *)
let _ =
let g = G.empty in
let g = G.add_edge_e ...
...
let file = open_out_bin "mygraph.dot" in
let() = Dot.output_graph file g in
...
if D.has_cycle g then ... else ...
7
Escribo autómatas como texto a archivo (en formato adecuado para graphviz) y luego ejecuto graphviz contra ese archivo.
Cuestiones relacionadas
- 1. autómatas en ocaml
- 2. cómo dibujar autómatas en Java
- 3. Python autómatas finitos biblioteca
- 4. ¿Cuál es el uso de autómatas finitos?
- 5. Funciones compuestas en ocaml
- 6. fold_tree en OCaml
- 7. temporizador genérica en OCaml
- 8. Clasificación topológica en OCaml
- 9. ignorar función en OCaml
- 10. ¿Cómo se cruzan dos listas en OCaml?
- 11. OCaml - ¿Cómo convierto int en una cadena?
- 12. ¿Tiene! = Significado en OCaml?
- 13. Functors en Ocaml
- 14. Tipos recursivos en OCaml?
- 15. programación modular en ocaml
- 16. Expresiones regulares en OCaml
- 17. compilación condicional en OCaml
- 18. Copiando campos en OCaml
- 19. paréntesis en Ocaml
- 20. Hashtables en ocaml
- 21. Sobrecarga en Ocaml
- 22. Tiempo de ejecución en Ocaml
- 23. Tablas de búsqueda en OCaml
- 24. módulo usando incluyen en OCaml
- 25. OCaml en la pila empresarial
- 26. Ocaml introducción
- 27. ocaml intérprete
- 28. sobrecarga de funciones en OCaml
- 29. Comprobación de subcadenas en Ocaml
- 30. Módulos no vinculados en OCaml
Bien, gracias. ¿Puedes darme más detalles de eso? – priyanka
El tipo de nodo es 'int', luego la función' vertex_name' en el módulo 'Dot' es' let vertex_name v = string_of_int v' –