2016-05-08 20 views
0

私はここにこのコードを持っています。グラフ疑問が

ここで私の質問は、OCamlでグラフをどのように扱うのですか?私はListsを使って作業するのに役立つ大きな関数ページを持っていますが、グラフを使ってあらかじめ定義された関数については何も見つかりませんでした。

私はより正確には、グラフを行うには、複雑な仕事を持って、私はOCamlautomatonを構築する必要がありますが、最初に私はシンプル行うことができます方法を理解したいと思いますが、どのようなグラフからnodesを取得して考えてノードとエッジの入力値を変えることはできますか?ここで私が持っているこのようなグラフを使ってテストを行うにはどうしたらいいですか?たとえば、ノード間をどのように移動できますか?

基本的に私はOCamlや関数のグラフについてのより良い情報を得ることができるウェブがあるかどうかを知りたいと思っています。

おかげ

PS:私はすでに私の検索が行われ、

+1

これは良い出発点です:http://ocamlgraph.lri.fr/index.en.html – Jack

+0

これは確かに私を助けるでしょう!ありがとう。私はそれが理解できることを願っています! –

答えて

1

まあ(私のような初心者のためにだけ多くの複雑なコードに)本当に便利なものを発見した、私が思うocamlgraphは新しいのために少し複雑ですOCamlプログラマー(後でそれを使うのは良い考えです)。

私が理解しているところでは、理解できる方法でノードとエッジを処理したいと考えています。起動するには

、私は(私は、このモジュールでGlushkov's constructionを実装し、それが本当にうまく動作します)あなたにそれを行うための迅速かつ簡単な方法だからMap module(それはtutorialだと)をテストの助言を与えるだろう。これは、あなたが今までオートマトンを見てどのようである

type ('state,'letter) automaton = { 
    initial : 'state ; 
    final  : 'state -> bool ; 
    transition : 'letter -> 'state -> 'state ; 
} 

:あなたの小さな洞察力を与えること

type ('state,'letter) automaton = { 
    initial : 'state ; 
    final  : 'state -> bool ; 
    transition : ('letter, 'state) list Map.Make('state); 
} 

これは私が('stateが明らかに命じたタイプではないので、それは正しい実装ではありませんが、アイデアがここにある)それを見る方法です。任意の状態をリストにマップすることができます(リストの代わりにSetを使用する新しいマップを作成する方法を理解している場合など)。

あなた自身で実装しようとすると、本当に便利になり、多くのことを学ぶことができます。

1

OCamlは、OCamlgraphライブラリのおかげで、グラフのサポートが優れています。それは十分に文書化されており、非常に強力ですが、それはファンクタに多く依存しており、通常はOCamlの初心者を混乱させます。したがって、プログラム分析のために開始した別のgraph libraryを試してみることもできます。これは、公式opamリポジトリに放出されていないが、あなたはいつも私たち自身のリポジトリから最新のアルファ版を入手することができます

opam repository add git://github.com/BinaryAnalysisPlatform/opam-repository.git 
opam install graphlib 

P.S. GraphlibはOCamlgraphに代わるものではありません。それはちょっと別の焦点があります。OCamlGraphは、graphlib がグラフデータ構造にもっと焦点を当てるとき、どのグラフ表現でも動作する汎用アルゴリズムにもっと焦点を合わせます。だから使いやすいですが、伸ばすのは難しいです。