7

Erlangの有向グラフモジュールは、状態を変更することで私を驚かせました。

Erlangで他のデータ構造モジュールを処理する場合、たとえば、渡されたデータ構造のインスタンスであるsetsモジュールは変更されません。この関数は、変更された新しいバージョンを返します。

>S = sets:new().
>sets:size(S).
0
>T = sets:add_element(S, "element").
>sets:size(S).
0
>sets:size(T).
1

これは、有向グラフモジュールを処理するときの動作ではありません。

>G = digraph:new().
>digraph:no_vertices(G).
0
>digraph:add_vertex(G, "vertex").
>digraph:no_vertices(G).
1

まず、この点で有向グラフラ​​イブラリが異なるのはなぜですか?

次に、さらに重要なことに、digraphモジュールは既存のバインディングに対して新しい状態をどのように追加しますか?

状態は、既存の変更されていないバインディングGを使用してdigraphモジュールが識別している別のプロセスに格納されていると思います。これは本当ですか?または、バインディングに関連付けられた状態を変更する他の方法はありますか?

4

1 に答える 1

9
  1. おそらく効率のために
  2. ETSを使用して有向グラフを保存しています。newからの戻り値は、実際にはetsテーブルへの参照です。

ツールバー:start()を実行します。erlangシェルからテーブルビジュアライザーアプリケーションを開きます-digraphユーティリティのetsテーブルのセットが表示されます。

edges
vertices
neighbours

digraph:new呼び出しからの戻り値の値は、これらのテーブルのetsテーブルIDです。

于 2009-09-03T23:21:53.307 に答える