:- module(task1, []). :- use_module(library(clpfd)). main :- writeln('task 1'), findall([Ones,Fives,Tens,Twenties], (payment(25, [coin(Ones,1,11),coin(Fives,5,4),coin(Tens,10,3),coin(Twenties,20,2)]), label([Ones,Fives,Tens,Twenties])), Solutions), forall(member(Sol, Solutions), (write('Solution: '), writeln(Sol))). payment(Sum, Coins) :- payment_acc(0, Sum, Coins). payment_acc(Acc, Sum, []) :- Acc #= Sum. payment_acc(Acc, Sum, [coin(Count, Value, Available)|Tail]) :- Count in 0..Available, NewAcc #= Acc + Count * Value, payment_acc(NewAcc, Sum, Tail). % ?- payment(25, [coin(Ones,1,11),coin(Fives,5,4),coin(Tens,10,3),coin(Twenties,20,2)]). % ?- payment(25, [coin(Ones,1,11),coin(Fives,5,4),coin(Tens,10,3),coin(Twenties,20,2)]), label([Ones, Fives, Tens, Twenties]).