Я новичок в прологе, пытаюсь решить эту классическую проблему размена монет.
изменить (M, P, N, D) с формулой, что M> = 0 и M = P + 5 * N + 10 * D вот мой подход
change(M,P,N,D) :-
M is P+5*N+10*D,
P is M - (5*N+10*10).
пара тест-кейсов
change(100,10,8,5).
True
change(X,10,8,5).
X = 100.
Однако, если я попытаюсь
change(100,P,8,5).
это дает мне «Аргументы недостаточно конкретизированы» вместо P = 10. Что это вызывает?
редактировать: исправьте мой код, используя предикат между между (0, M, P), между (0, M, N), между (0, M, D), M равно P + 5 * N + 10 * D.
is/2
оценивает арифметическое выражение: это не чисто логический предикат. Кажется, вы уже знаете по крайней мере один способ решить эту проблему; см. дубликат вопроса и ответ на лучший способ. - person   schedule 01.04.2015