我想建立一个知识库,在该知识库中我可以断言在不同的在线商店上的支出是事实。现在,一条规则应该能够计算这些费用的总和。提示是我在商店有不同的折扣。我的事实:
expense(shopA, 450).
expense(shopB, 60).
我的规则:
sumOfExpenses(X):-
expense(shopA, A),
expense(shopB, B),
expense(shopC, C),
X is A*0.05 + B*0.25 + C*0.1.
sumOfExpenses(X)的执行返回false。我进行了一些调试,并且如果要添加例如:expense(shopC, 50).
到它可以起作用的事实。
是否有解决此问题的方法?
答案 0 :(得分:1)
您可以添加一组其他事实来表示商店折扣。例如
TRUE displays progress on the console using \r.
It is produced in freads C code where the very nice (but R level)
txtProgressBar and tkProgressBar are not easily available.
showProgress = getOption("datatable.showProgress") # default: TRUE
与在费用总和公式中硬性地确定折扣相比,这是一个更具可读性,可维护性和可扩展性的解决方案。它还使您可以编写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).
谓词作为练习。