我在 Prolog 程序中遇到以下问题。问题的数学公式如下:
让 Entanglements = entanglement(Symbol, Index, PosX, PosY) 形式的结构集,其中 Symbol 是一个字符,Index 是一个整数,PosX 和 PosY 变量(绑定或未绑定)。对于 Entanglements 中的所有 entanglement(Symbol, Index, PosX, PosY),将两个变量 PosX 或 PosY 之一绑定,另一个未绑定,将未绑定的变量绑定到 Symbol。
之后,让 RemEntanglements = all entanglement(Symbol, Index, PosX, PosY) in Entanglements,至少有一个 PosX 和 PosY 绑定。
问题:给定集合的纠缠,剩余的纠缠(RemEntanglements)是什么?
我的代码没有按预期运行。你能提示我应该改变什么吗?
function(Entanglements, RemEntanglements) :-
findall(entanglement(Symbol, Index, PosX, PosY),
(member(entanglement(Symbol, Index, PosX, PosY), Entanglements),
(var(PosX), nonvar(PosY), PosX = Symbol;
var(PosY), nonvar(PosX), PosY = Symbol)),
Changed),
findall(entanglement(Symbol1, Index1, PosX1, PosY1),
(member(entanglement(Symbol1, Index1, PosX1, PosY1),Entanglements),
(var(PosX1);
var(PosY1))),
RemEntanglements).
测试查询:
test(RemEntanglements) :-
function([entanglement('0',2,'X',P3),
entanglement('X',3,P3,P1), entanglement('0',4,P6,P7)],
RemEntanglements).
这个查询应该如下工作: 1) 将 P3 绑定到 '0',假设 entanglement('0',2,'X',P3) 有一个绑定变量和一个未绑定变量
2) RemEntanglements = [entanglement('X',3,'0',P1), entanglement('0',4,P6,P7)]
,假设 P3 已经绑定到 '0' 符号,但其他的仍然未绑定。
我得到的答案:
[entanglement('0', 2, 'X', _G11664), entanglement('X', 3, _G11655, _G11656), entanglement('X', 3, _G11647, _G11648), entanglement('0', 4, _G11639, _G11640), entanglement('0', 4, _G11631, _G11632)]
先感谢您!