Frage

Das Erlang-Digraphenmodul überraschte mich durch die Zustandsänderung.

Beim Umgang mit anderen Datenstrukturmodulen in Erlang, beispielsweise dem Sets-Modul, bleibt die Instanz der übergebenen Datenstruktur unverändert.Die Funktion gibt eine neue, geänderte Version zurück, z.B.

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

Dies ist nicht das Verhalten beim Umgang mit dem Digraph-Modul.

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

Erstens: Warum unterscheidet sich die Digraphenbibliothek in dieser Hinsicht?

Zweitens und noch wichtiger: Wie fügt das Digraph-Modul einen neuen Status zu einer vorhandenen Bindung hinzu?

Ich gehe davon aus, dass der Zustand in einem anderen Prozess gespeichert wird, den das Digraph-Modul anhand der vorhandenen und unveränderten Bindung G identifiziert.Ist das der Fall?Oder gibt es andere Möglichkeiten, den mit einer Bindung verbundenen Status zu ändern?

War es hilfreich?

Lösung

  1. Wahrscheinlich aus Effizienzgründen
  2. Es verwendet ETS zum Speichern des Digraphen.Der Rückgabewert von new sind eigentlich Verweise auf ets-Tabellen.

Führen Sie toolbar:start() aus.Öffnen Sie in Ihrer Erlang-Shell die Tabellenvisualisierungsanwendung. Sie sehen eine Reihe von ETS-Tabellen für das Digraph-Dienstprogramm.

edges
vertices
neighbours

Die Werte im Rückgabewert des Aufrufs digraph:new sind die ets-Tabellen-IDs dieser Tabellen ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top