solve(Amounts) :-
Total = 1505,
Prices = [215, 275, 335, 355, 420, 580],
length(Prices, N),
length(Amounts, N),
Amounts :: 0..Total//min(Prices),
Amounts * Prices #= Total,
labeling(Amounts).
ответ
В этом нет ничего плохого. Это пример из http://eclipseclp.org/examples/xkcd287.ecl.txt, и если вы не опустили линию
:- lib(ic).
который загружает interval constraint solver, он будет работать нормально в ECLiPSe Прологе.
(см. Http://xkcd.com/287/) --- ... и 'lib (ic)' - это что, библиотека для целых ограничений? –
'lib (ic)' означает интервальные ограничения. Он реализует ограничения над целыми числами и действиями (представленными как интервалы с плавающей запятой). Я исправлю свой ответ. – jschimpf
спасибо за разъяснение! –
ли работать в SWI-Пролог:
?- use_module(library(clpfd)).
?- [user].
solve(Amounts) :-
Total = 1505,
Prices = [215,275,335,355,420,580],
length(Prices, N),
length(Amounts, N),
min_list(Prices, MinPrice),
MaxAmount is Total//MinPrice,
Amounts ins 0..MaxAmount,
scalar_product(Prices, Amounts, #=, Total),
label(Amounts).
^D
?- solve(X).
X = [1, 0, 0, 2, 0, 1] ;
X = [7, 0, 0, 0, 0, 0].
Но я думаю, его не проблему поиска оптимизации,
целевая функция отсутствует.
Bye
Это не SWI-Prolog. Предположительно это [tag: eclipse-prolog] – false
Почему вы говорите, что с этим что-то не так? – lurker