我想在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,我该如何实现?我必须写一个单独的规则??希望你明白我想说的是什么。
感谢
答案 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谓词中的内容进行比较,看看已经过了多少天。
希望这有用!