Prolog规则 - 需要帮助才能使某些工作变得有效?

时间:2010-03-09 12:43:49

标签: prolog

我想在prolog中写一条规则,基本上说如果用户X在7天内没有支付Y,那么它将评估为payment_outstanding(X)。

到目前为止我有这样的事情:

debtpayment_unfulfilled(X) :- owes_money(X, Amountowed, Amountpaid, Days), Days > 7 ,Amountowed > Amountpaid.

owes_money(bob, 500, 0, 3).            //bob borrowed 500 on day 3

规则有效,但问题是Days + 7部分,例如在系统中,如果有人在第3天借用,那么该子句永远不会评估为true,Days将始终为3,我该如何实现?我必须写一个单独的规则??希望你明白我想说的是什么。

感谢

1 个答案:

答案 0 :(得分:1)

如果我找对你,这是不可能的。你应该在你的规则owes_money(bob, 500, 0, 3).中实施鲍勃拿钱的确切日期,然后将其与今天的日期进行比较。

要获取确切日期,请查看此谓词:get_time(-Time)。而且为了处理时间你可以使用:

convert_time(+Time, -String)
convert_time(+Time, -Year, -Month, -Day, -Hour, -Minute, -Second, -MilliSeconds)

我仍然不确定这不是作业,我有点害怕开箱即用。

快速解决方案是更改您的谓词owes_money,如下所示:

owes_money(bob, 500, 0, 2010, 3, 10). %2010 for the year, 3 for the month  ... 

然后将此日期与当前日期进行比较:

get_time(X), convert_time(X, CurrYear, CurrMonth, CurrDay, _, _, _, _).%CurrYear will give you current year, etc ... . You don't need the hour minutes etc .. that's why are the _

现在剩下的就是将CurrYear,CurrMonth和CurrDay与owes_money谓词中的内容进行比较,看看已经过了多少天。

希望这有用!