2010-03-09 56 views
3

我想在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 

规则工作,但问题是天+ 7的一部分,例如在系统中,如果有人在第3天则该条款将永远不会评估借款真的有天将永远是3,我怎么能实现这个?我必须写一个单独的规则?希望你明白我想说什么。

谢谢

+0

我在这里与你的问题空间挣扎。我希望看到他们借用的日期与当前日期相关,以确定当前日期 - 借用日期> 7天。我不确定“天”是指什么,如果是借款后的几天,那么必须计算并传回您的支票以查找未填写的帐户。这足够抽象,看起来像作业。 – Lazarus 2010-03-09 12:53:00

+0

我向你保证它没有功课。我已经完成大学了! – KP65 2010-03-09 13:23:55

回答

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这样的:

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:

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

然后与当前日期比较这日期和CurrDay与你从owes_money谓词中得到的内容并查看已经过了多少天。

希望这有帮助!

+0

我会玩你给我的。实际上,我正在研究义务管理,如果你看看我的其他一些问题,你会发现我经常不会“请”某人为我做点什么。我对prolog的知识非常有限,我正在尽我所能,就像我之前说过的那样,它不是功课! - 我没有多年的“功课”说实话!谢谢你的回复队友 – KP65 2010-03-10 15:26:01

+0

公平的话......如果你需要,我会帮你进一步的。 – anthares 2010-03-10 15:32:32