2017-01-27 24 views
0

Ich benutzte graphviz basierend auf der Empfehlung von vielen Menschen, aber ich stieß auf ein Problem. Ich möchte einen Punkt in ocaml unter Verwendung der Format.module schreiben und ich habe einen Datensatz mit fünf Feldern, die einen Automaten einschließlich der Übergänge definieren, die durch eine Liste int*char*int und Endzustände dargestellt werden, die durch eine int Liste dargestellt werden. Das erste Feld ist der Anfangszustand, der ein int ist. Ich habe auch ein Funktionsmember definiert, der einen Parameter akzeptiert und testet, ob es Mitglied einer bestimmten Liste ist. Wie kann ich das tun, damit ich einen vollen Punkt schreiben kann, der den Anfangszustand erkennt und ihn mit Knoten [shape = point]start ; start -> x darstellt und die anderen Übergänge mit Kreisen und die Endzustände mit Doppelkreisen? Ich versuchte, es zu tun, aber ich lief Probleme in Als ich es kompilieren, heißt esWie zeichnet man ein Automatendiagramm?

File "automatagraphicstest1.ml", line 44, characters 22-37: Error: This expression has type automate -> Format.formatter -> int * char * int -> unit but an expression was expected of type Format.formatter -> 'a -> unit Type automate is not compatible with type Format.formatter

+0

Bitte verwenden Sie eine Pastebin für Ihren Code. Ein Screenshot Ihres Editors ist nicht verwendbar. – Drup

+0

http://pastebin.com/QK5qxEhd –

+0

http://pastebin.com/5NSb7qFU Dies ist ein weiterer Versuch, was ich will, wenn Sie es betrachten, können Sie verstehen, was ich hier tun möchte –

Antwort

0

Ihre Art Fehler zu beheben, ersetzen Sie einfach die fmt_transitions Funktion durch die:

let fmt_transitions fmt auto = 
    Format.fprintf fmt "@[<v 2>digraph output {@,%[email protected],@]}@,@." 
    (Format.pp_print_list (fmt_transition1 auto)) auto.transitions 

Ihr Problem ist, dass pp_print_list erwartet etwas vom Typ Format.formatter -> 'a -> unit. Ihre Funktion fmt_automaton1 nimmt den Automaten als zusätzliches erstes Argument, also müssen wir ihn zuerst teilweise anwenden, dann können wir die Liste der Übergänge bereitstellen.

+0

Ich bekomme das, aber ich muss Testen Sie, ob ein inted das int ist, das wir im Record als initial state haben: etat_initial, dann müssen wir tun node [shape = point] start; Start -> Innedge; und auch wenn ein Ooutedge ein Endzustand ist, wenn es zur Liste etats_finaux gehört, dann sollte es Knoten [shape = doublecircle] oustedge; [shape = Kreis]; inedge-> outedge [label = 'by']; –

+0

und form kreis zu allen regulären übergänge, aber das problem ist in fmt –

+0

fmt_transitions * es dauert nur eine liste und ich weiß nicht, was zu verwenden, um die string zu entkommen –

Verwandte Themen