2009-09-03 27 views
6

El módulo de digrafos Erlang me sorprendió por el estado de mutación.Estado en Erlang Digraphs

Al tratar con otros módulos de estructura de datos en Erlang, por ejemplo, el módulo sets, la instancia de la estructura de datos pasada, no se modifica. La función devuelve una nueva versión alterada, p.

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

Este no es el comportamiento cuando se trata del módulo dígrafo.

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

En primer lugar, ¿por qué la biblioteca de dígrafos es diferente a este respecto?

En segundo lugar, y lo que es más importante, ¿cómo es que el módulo de digrafos agrega un nuevo estado a un enlace existente?

Supongo que el estado se está almacenando en otro proceso que el módulo del dírafo identifica mediante el enlace existente y sin alterar G. ¿Es este el caso? ¿O hay otras formas de modificar el estado asociado a un enlace?

Respuesta

9
  1. Probablemente para la eficiencia
  2. Se trata de utilizar ETS para almacenar el dígrafo. El valor de retorno del nuevo son en realidad referencias a tablas ets.

Ejecutar barra de herramientas: inicio(). desde su shell erlang y abra la aplicación visualizadora de tablas - verá un conjunto de tablas ets para la utilidad digraph.

edges 
vertices 
neighbours 

Los valores en el valor de retorno desde el dígrafo: nueva llamada son los ID de tabla ets de estas tablas ...

+0

Gracias, no pude encontrar cualquier proceso que parecía que estaban tratando con dígrafos. ¿Existen convenciones en los módulos erlang que indiquen que el estado se está almacenando fuera del proceso actual? –

+0

No, no creo que exista. Pero cuando vi el valor de retorno de digraph: new() se veía notablemente como una referencia a algo más y el lugar habitual para almacenar "algo más" es ets ... –

+0

Recuerdo que en la documentación anterior de eDraph se mencionaba solo en doc en la parte de Descripción, pero ahora no lo es. –