Pergunta

O módulo Erlang DiDraphs me surpreendeu ao mutar o estado.

Ao lidar com outros módulos de estrutura de dados em Erlang, por exemplo, o módulo Sets, a instância da estrutura de dados passada, não é modificada. A função retorna uma nova versão alterada, por exemplo

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

Este não é o comportamento ao lidar com o módulo DiDraph.

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

Em primeiro lugar, por que a Biblioteca DiGraph é diferente nesse aspecto?

Em segundo lugar, e mais importante, como o módulo DiDraph está adicionando um novo estado contra uma ligação existente?

Suponho que o estado esteja sendo armazenado em outro processo que o módulo DiDraph está identificando usando a ligação existente e inalterada G. Esse é o caso? Ou existem outras maneiras de modificar o estado associado a uma ligação?

Foi útil?

Solução

  1. Provavelmente para eficiência
  2. Está usando o ETS para armazenar o díadera. O valor de retorno dos novos são realmente referências às tabelas do ETS.

Executar barra de ferramentas: start (). No seu shell Erlang e abra o aplicativo Visualizador de tabela - você verá um conjunto de tabelas ETS para o utilitário DiDAPH.

edges
vertices
neighbours

Os valores no valor de retorno do DiDraph: nova chamada são os IDs da tabela Ets dessas tabelas ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top