我們有一個列表清單認爲例?- 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之間。每個列表必須以一個常量開始,它至少包含一個變量。CLP Prolog - 邏輯編程
:- 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).
我有點懷疑基礎案例,事實的想法。因爲每個列表必須根據約束在列表中包含一個變量,另一方面我們考慮「空列表」情況。