Prolog 序言规则-需要帮助才能让某些东西工作吗?

Prolog 序言规则-需要帮助才能让某些东西工作吗?,prolog,Prolog,我想在prolog中写一个规则,它基本上说如果用户X在7天内没有支付Y,那么它将评估为未支付的付款(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

我想在prolog中写一个规则,它基本上说如果用户X在7天内没有支付Y,那么它将评估为未支付的付款(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
owes_money(bob, 500, 0, 2010, 3, 10). %2010 for the year, 3 for the month  ... 
规则是有效的,但问题是天数+7部分,例如,在系统中,如果有人在第3天借款,则该子句将永远不会计算为true,但天数将始终为3,我如何实现这一点?我必须写一个单独的规则吗??希望你能理解我想说的话


谢谢

如果我没有弄错,这是不可能的。你应该在你的规则中实现欠钱(bob,500,0,3)。bob取钱的确切日期,然后将其与今天的日期进行比较

要获得准确的日期,请查看以下谓词:
get\u time(-time)
。此外,在处理时间方面,您可以使用:

convert_time(+Time, -String)
convert_time(+Time, -Year, -Month, -Day, -Hour, -Minute, -Second, -MilliSeconds)
我仍然不确定这是否是一个家庭作业,我有点害怕给你开箱即用的解决方案

一个快速的解决方案是如下更改谓词
欠钱

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
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谓词中得到的结果进行比较,看看已经过去了多少天


希望这是有帮助的

我在这里为你的问题空间而挣扎。我希望看到他们借钱的日期与当前日期相关,以确定当前日期-借钱日期>7天。我不确定“天数”指的是什么,如果是借款后的天数,则必须计算出该天数,并将其返回给您的支票,以查看未兑现的账户。这很抽象,看起来像是家庭作业。我向你保证这不是家庭作业。我已经大学毕业了!我要用你给我的东西玩一玩。我实际上是在研究义务管理,如果你看看我的其他一些问题,你会发现我通常不只是“要求”某人为我做点什么。我对prolog的了解非常有限,我正在尽我最大的努力,就像我之前说的,这不是家庭作业老实说,我已经好几年没有“家庭作业”了!谢谢你的回复,那就足够公平了。。。如果你需要,我会进一步帮助你。