将整数列表转换为 CLPFD 域

Converting a list of integers into a CLPFD domain

我正在尝试将整数列表转换为 CLPFD 域。例如[1,5,7] -> 1\/5\/7。我尝试阅读文档,但找不到任何内容。我唯一找到的是 fd_dom/2。 fd_dom documentation. 在这里,他们将域转换为整数列表(与我想要的相反)。我是 CLPFD 和 prolog 的新手。所以,如果有人除了回答我的问题之外还可以解释 fd_dom 文档,我将不胜感激。

这是我用来转换整数列表以用作域(析取)的方法:

list_domain_disjunction([D|Ds],Disj) :-
        foldl(disj,Ds,D,Disj).
disj(A,B,C) :- C = \/(B,A).

示例:

?- list_domain_disjunction([1,5,7],X).
X = 1\/5\/7.

可以看到这种析取是如何“真正”用 write_canonical/1:

表示的

?- write_canonical(1\/5\/7).
\/(\/(1,5),7)

注意:list_domain_disjunction/2 是不可逆的,即它不能用于将析取转换为整数列表。