Prolog-拆分变量列表时如何保留信息?

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],

作为我的后续问题(感谢Patrick)

我有一个这样的变量列表,它是谓词
到变量列表(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]
    ).

我只测试了你的测试输入;由于没有统一的相等性检查是额外的逻辑检查,因此在一般情况下,它可能正常工作,也可能不正常工作。

这非常有用。我曾经认为不绑定就不可能进行检查。谢谢你的建议。