用Lua描述一个图形结构



我需要构建一种用户友好的方式来在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")'。我不喜欢这个解决方案,因为它对我的用户来说很容易出错(他们可能会忘记"ref"或引号)。

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

还有其他解决方案吗?

我认为最简单的解决方案是将图结构编码在一些哑表中,并使用构造函数将这些表转换为您喜欢的内部图数据结构。构造函数也可以以直接的方式进行错误处理,因为它可以查看所有输入(而不是像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},
}

最新更新