7 Stimmen

Zustand in Erlang-Digraphen

Das Erlang-Digraphen-Modul überraschte mich mit der Mutation des Zustands.

Beim Umgang mit anderen Datenstrukturmodulen in Erlang, z. B. dem Sets-Modul, wird die Instanz der übergebenen Datenstruktur nicht verä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 beim Digraphenmodul nicht der Fall.

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

Erstens: Warum ist die Digraphenbibliothek in dieser Hinsicht anders?

Zweitens, und das ist noch wichtiger, wie fügt das Digraphenmodul neue Zustände zu einer bestehenden Bindung hinzu?

Ich nehme an, dass der Zustand in einem anderen Prozess gespeichert wird, den das Digraphenmodul mit Hilfe der bestehenden und unveränderten Bindung G identifiziert. Ist dies der Fall? Oder gibt es andere Möglichkeiten, den mit einer Bindung verbundenen Zustand zu ändern?

9voto

Alan Moore Punkte 1823
  1. Wahrscheinlich aus Gründen der Effizienz
  2. Es verwendet die ETS, um den Digraphen zu speichern. Der Rückgabewert von new sind eigentlich Verweise auf ETS-Tabellen.

Führen Sie toolbar:start(). von Ihrer Erlang-Shell aus und öffnen Sie die Tabellenvisualisierungsanwendung - Sie werden eine Reihe von ets-Tabellen für das Digraphenprogramm sehen.

edges
vertices
neighbours

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X