描述Lua中的图形结构

时间:2014-02-11 21:20:29

标签: graph lua recursive-datastructures

我需要构建一种用户友好的方式来在Lua中声明图形。创建图形的用户是通常不了解Lua语言的计算机科学家。

目前,图表只是普通表格。一个例子(不工作):

local x = "some text"
local a_graph = {
  a = 1,
  b = {
    c = x
  },
  c = {
    k = b
  }
}

上述图形描述的工作版本应该足以构建图形,其中“k = b”被“k = b参考”替换(是的,“a_graph”中包含的“b”)。我可以轻松编写函数来进行查找(递归访问父母并查看他们的直接孩子),但我的问题是检测并存储“b”是一个参考。 我还需要允许“c = x”,其中x是现有变量。

我已经找到了两个解决方案:

  1. 使用引用周围的函数,它本身写为文本,例如'k = ref(“b”)'。 我不喜欢这个解决方案,因为它对我的用户来说容易出错(他们可能会忘记“参考”或引号)。

  2. 在全局查找失败时,对_G或_ENV的__index进行Moodify以返回某些内容。 我测试了它并且它有效,但看起来很奇怪。

  3. 还有其他解决方案吗?

1 个答案:

答案 0 :(得分:1)

我认为最直接的解决方案是在一些哑表中对图结构进行编码,并使用构造函数将这些表转换为首选的内部图数据结构。构造函数也可以以简单的方式进行错误处理,因为它可以查看所有输入(而不是像ref函数那样本地化的东西)。

将输入表示与最终结果分开也可以让您拥有多种表示形式。例如:

local graph_1 = adjacency_list {
  a = {'b'},
  b = {'a', 'c'},
  c = {'a'},
}

local graph_2 = list_of_edges {
  {'a', 'b'},
  {'b', 'a'},
  {'b', 'c'},
  {'c', 'a'},
}

local graph_2 = adjacency_matrix {
  {0, 1, 0},
  {1, 0, 1},
  {1, 0, 0},
}