我正在尝试编写一个使set r具有对称关系的函数(如果它尚不具有对称关系)(例如,如果它具有2,1而不是1,2,则应加1,2)。我已经播种了它,并且在大多数情况下都可以使用,但在其他情况下却失败了,因为它没有添加应该添加的所有对,而似乎没有韵律或理由。
我检查了程序正在使用的其他功能,它们似乎都可以正常工作,因此我将其范围缩小到基本上只是一个功能不起作用但无法弄清楚原因。
--these two dictionaries provide the initial set, r.
r={
['ac']=true,
['ba']=true,
['cd']=true,
['ad']=true,
['bd']=true,
['aa']=true,
['ca']=true,
}
let={
['a']=1,
['b']=2,
['c']=3,
['d']=4
}
r最初打印如下: (1,3) (2,1) (3,4) (1,4) (2,4) (3,1) (1,1)
--this function takes r as a parameter and checks the keys for the inverse ordered pair (e.g. if it has an 'ad' key but not 'da', it should add it and then return r as a now symmetric relation.
function make_symmetric (tab)
for k in pairs(tab) do
if not tab[string.sub(k,2,2)..string.sub(k,1,1)] then
tab[string.sub(k,2,2)..string.sub(k,1,1)]=true
end
end
return tab
end
然后r打印为: (4,3) (3,1) (1,2) (1,1) (1,3) (1,4) (2,4) (2,1) (3,4)
如您所见,它并没有像需要使集合对称那样添加(4,2)和(4,1),而是成功地添加了其他集合。
谢谢!