2010-03-09 33 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