我正在寻找学习解决Prolog中约束的资源。例如,
List=[X, Y, Z], List ins 1..4, X - Y #= Z.
答案 0 :(得分:3)
我的理解是,您希望获得具体的解决方案(而不是域名)。为此,请使用label/1
或labeling/2
,这将提供所有显式解决方案(通过回溯)。在SWI-Prolog中,这些谓词在此处记录:labeling/2。
label(List)
相当于labeling([],List)
。
对于这个简单的例子,label(List)
就足够了:
? - List = [X,Y,Z],List ins 1..4,X - Y#= Z,label(List)。
一般情况下,您可以阅读clpfd的完整文档(此处为SWI-Prolog)。