Я новичок в Прологе и хочу написать функцию, которая возвращает все различные способы внесения сдачи за доллар (100 центов). У нас есть 2-центовые монеты, 11-центовые монеты, 38-центовые монеты и, что интересно, -8-центовые монеты (монета стоимостью -8 центов). Кроме того, всего у нас есть только 10 монет номиналом «-8» центов. (нет верхней границы для других видов монет)
Вот моя попытка:
change100([P2, P11, P38, Pn8]):-
Pn8 =< 10,
Pn8 >= 0,
P2 >= 0, P11 >= 0, P38 >= 0,
D is 2 * P2 + 11 * P11 + 38 * P38 - 8 * Pn8,
D = 100.
Но это не работает. Когда я запускаю его и запрашиваю
?- change100(A).
я получил сообщение
ERROR:
=< /2: Arguments are not sufficiently instantiated.
Почему это? Как я могу это исправить?
Первоначальная постановка задачи:
Есть 4 вида монет: монета в 2 цента, монета в 11 центов, монета в 38 центов и, что интересно, монета в 8 центов (монета стоимостью -8 центов). Что еще более интересно, всего когда-либо было создано всего 10 -8-центовых произведений, поэтому вам не нужно беспокоиться о ситуациях с более чем 10 -8-центовыми произведениями.
Сколькими способами можно разменять доллар (100 центов)?
Например, один из способов получить сдачу на 100 центов — использовать 4 монеты по 2 цента, 8 монет по 11 центов, 2 монеты по 38 центов и 9 монет по 8 центов.
Возможно иметь 0 некоторых монет, например. 50 монет по 2 цента — это один из способов разменять доллар.
Напишите на Прологе функцию change100(Coins), которая начинается так:
change100([P2, P11, P38, Pn8]) :- % ...
P2 — количество монет номиналом 2 цента, P11 — количество монет номиналом 11 центов и так далее. Имейте в виду, что, как указано в описании задачи, Pn8 не больше 10.