【发布时间】:2015-08-27 19:31:40
【问题描述】:
我们有一个列表列表,认为示例 ?- solve([[40,A,B],[30,B],[60,A,B,C]]),label([A,B,C]). 将成功替换 B=30、A=10 和 C=20。
此示例的约束条件是 A+B=40,A+B+C=60,通常每个变量都在 0 到 100 之间。每个列表都必须以常量开头,并且至少包含一个变量。
:- use_module(library(clpfd)).
sum([],0). % if the list is empty.
sum([X|XS],Z) :-
sum(XS,Z1),
X in 0..100,
Z #= X+Z1.
solveOne([Const|Var]) :-
sum(Var,Const).
solve([]). % if the list of list is also empty
solve([First|Others]) :-
solveOne(First),
solve(Others).
我对基本案例和事实的想法有点怀疑。因为每个列表都必须根据约束在列表中包含一个变量,另一方面我们考虑“空列表”的情况。?
【问题讨论】: