【发布时间】:2016-11-27 20:49:52
【问题描述】:
有没有一种方法可以显示所有解决方案和/或找出 SICTus prolog 中有多少解决方案?例如,下面的代码可能用于解决地图着色问题。
:- use_module(library(clpfd)).
solve_AUSTRALIA(WA,NT,Q,SA,NSW,V):-
domain([WA,NT,Q,SA,NSW,V], 1, 4),%colours represented by integers from 1 to 4
WA #\= NT,
WA #\= SA,
NT #\= SA,
NT #\= Q,
SA #\= Q,
SA #\= NSW,
SA #\= V,
Q #\= NSW,
NSW #\= V,
labeling([],[WA,NT,Q,SA,NSW,V]).
目前,我每次都输入; 以查看进一步的解决方案,直到 Prolog 拒绝。有没有一种方法可以告诉 prolog 一次显示所有解决方案,或者更好的是,我可以找到有多少解决方案。就像 prolog 告诉我的,这个问题有五种解决方案。
【问题讨论】:
-
您可以尝试使用
findall/3、findall/4、bagof/3或setof/3。它们是相似的。例如,您要做的是将解决方案谓词放在findall(+Templagte, :Solution, -Bag),原始数据集为Template,集体解决方案为-Bag。 -
SICStus 中 clpfd 的一般提示:在顶层说
assert(clpfd:full_answer)以获得包括所有附加约束在内的完整答案!
标签: prolog sicstus-prolog