2017-01-27 2 views
0

私は多くの人から私に与えられた勧告に基づいてgraphvizを使用しましたが、問題が発生しました。私はocamlにドットを書きたいと思っています。int*char*intのリストとintのリストで表される最後の状態で表される遷移を含むオートマトンを定義する5つのフィールドを持つレコードがあります。最初のフィールドは初期状態で、1つはintです。私はまた、パラメータを受け取り、指定されたリストのメンバであるかどうかをテストする関数メンバを定義しました。最初の状態を認識し、ノード[shape = point]start ; start -> xとそれ以外の遷移を円で表し、最終状態を二重丸で表す完全な点を書くことができるようにするにはどうすればよいですか?私はそれをやってみましたが、私はそれをコンパイルするとき、私は問題に走った、それはあなたのタイプのエラーを修正するにはどのようにオートマトンの図を描くのですか?

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

コードにペーストビンを使用してください。エディタのスクリーンショットは使用できません。 – Drup

+0

http://pastebin.com/QK5qxEhd –

+0

http://pastebin.com/5NSb7qFUこれは私がここで何をしたいかを理解するかもしれないが、それを見れば私が望むもので別の試みです –

答えて

0

を言う、ちょうどこのによるfmt_transitions機能を置き換える:

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

あなたの問題は、そのpp_print_listを期待ですタイプはFormat.formatter -> 'a -> unitです。あなたの関数fmt_automaton1はオートマトンを余分な第1引数として取ります。そのため、最初に部分的に適用する必要があります。その後、遷移リストを提供することができます。

+0

私はそれを得るが、私はする必要があります初期状態としてレコード内にintedgeがあるかどうかをテストします:etat_initial then node [shape = point] start; start - > inedge; outedgeがリストetats_finauxに属していればアウトエッジが最終状態であればノード[shape = doublecircle] outedge; [shape = circle]; inedge-> outedge [label = 'by']; –

+0

すべての通常のトランジションに円を描きますが、問題はfmtにあります –

+0

fmt_transitions *リストを取得するだけで、文字列をエスケープするために何を使用するのか分かりません –

関連する問題