【问题标题】:Prolog Rule - need help with getting something working?Prolog 规则 - 需要帮助以使某些东西正常工作?
【发布时间】:2010-03-09 12:43:48
【问题描述】:

我想在 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,我该如何实现?我必须写一个单独的规则吗?希望你明白我想说什么。

谢谢

【问题讨论】:

  • 我在这里为您的问题空间而苦苦挣扎。我希望看到他们借钱的日期与当前日期相关,以确定当前日期 - 借入日期 > 7 天。我不确定“天数”是指什么,如果是借款后的天数,那么必须计算并传回您未履行帐户的支票。这足够抽象,看起来像家庭作业。
  • 我向你保证这不是家庭作业。我已经大学毕业了!

标签: prolog


【解决方案1】:

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

要获得确切的日期,请查看以下谓词: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 谓词中得到的结果进行比较,看看已经过去了多少天。

希望对您有所帮助!

【讨论】:

  • 我会玩弄你给我的东西。我实际上正在研究义务管理,如果您查看我的其他一些问题,您会发现我经常不只是“要求”某人为我做某事。我对序言的了解非常有限,并且正在尽力而为,就像我之前所说的那样,这不是家庭作业! - 老实说,我多年来没有任何“家庭作业”!谢谢小伙伴的回复
  • 那么公平......如果您需要,我会进一步帮助您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-01
  • 2019-05-27
  • 2015-02-18
  • 2015-05-06
  • 1970-01-01
相关资源
最近更新 更多