Вы можете добавить дополнительный набор фактов для представления скидок магазина.Например,
discount(shopA, 0.05).
discount(shopB, 0.55).
discount(shopC, 0.10).
Это более удобочитаемое, поддерживаемое и масштабируемое решение, чем жесткая привязка скидок в формуле суммы затрат.Это также позволяет вам написать более гибкую версию предиката sum_of_expenses/1
.Например,
sum_of_expenses(Sum) :-
findall(
Value,
( expense(Shop, Expense),
discount(Shop, Discount),
Value is Expense * Discount
),
Values
),
sum(Values, Sum).
В расчетах будут использоваться только те магазины, на которые есть расходы.Я оставлю вам писать предикат sum/2
в качестве упражнения.