将整数列表转换为 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
是不可逆的,即它不能用于将析取转换为整数列表。
我正在尝试将整数列表转换为 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
是不可逆的,即它不能用于将析取转换为整数列表。