Prolog中的“ If == null”等效项

时间:2018-11-13 19:02:03

标签: prolog

我想建立一个知识库,在该知识库中我可以断言在不同的在线商店上的支出是事实。现在,一条规则应该能够计算这些费用的总和。提示是我在商店有不同的折扣。我的事实:

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).到它可以起作用的事实。

是否有解决此问题的方法?

1 个答案:

答案 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). 谓词作为练习。