Prolog-拆分变量列表时如何保留信息?
作为我的后续问题(感谢Patrick) 我有一个这样的变量列表,它是谓词Prolog-拆分变量列表时如何保留信息?,prolog,unification,Prolog,Unification,作为我的后续问题(感谢Patrick) 我有一个这样的变量列表,它是谓词到变量列表(InputList,X)的输出: 现在我想将列表拆分为“9”,结果如下: Result = [[_G1426, _G1429, _G1432],[_G1438, _G1441]]. 我使用的谓词如下: split(List, Pivot, Result) :- (append(Left, [Pivot|Rest], List) -> Result = [Left|Right],
到变量列表(InputList,X)
的输出:
现在我想将列表拆分为“9”,结果如下:
Result = [[_G1426, _G1429, _G1432],[_G1438, _G1441]].
我使用的谓词如下:
split(List, Pivot, Result) :-
(append(Left, [Pivot|Rest], List)
-> Result = [Left|Right],
split(Rest,Pivot,Right);
Result = [List]).
X = [9,9,9,9,9,9]
Result = [[],[],[],[],[],[],[]]
但这仅适用于非变量列表的列表,例如:
Y = [1,2,6,9,6,5,9,7,1]
如果将轴设置为“9”,则列表将拆分为
Result = [[1,2,6],[6,5],[7,1]]
但对于如上所述的变量列表,应用此谓词将自动将每个无界变量绑定到轴,输出列表如下所示:
X = [9,9,9,9,9,9]
Result = [[],[],[],[],[],[],[]]
我知道我可以先拆分它们,然后将应用于变量列表
,但随后原始列表X
中保留的关系将丢失。我需要建立一个约束模型,以便以后我可以处理列表中的每个变量(如设置每个变量的范围),最终能够给出列表X
的固定结果
在执行拆分时,是否有方法避免将轴绑定到变量?
==
将在不绑定的情况下执行相等检查:
?- X == 9.
false.
?- X == Y.
false.
?- X == X.
true.
?- X = Y, X == Y.
X = Y.
因此,您可以按如下方式拆分:
split([First|Rest], Pivot, Result) :-
(First == Pivot ->
Result = [[], Rest]
;
split(Rest, Pivot, [Left, Right]),
Result = [[First|Left], Right]
).
我只测试了你的测试输入;由于没有统一的相等性检查是额外的逻辑检查,因此在一般情况下,它可能正常工作,也可能不正常工作。这非常有用。我曾经认为不绑定就不可能进行检查。谢谢你的建议。