Правило Пролога - нужна помощь, чтобы что-то заработало? - PullRequest
3 голосов
/ 09 марта 2010

Я хочу написать правило в прологе, в котором, в основном, говорится, что если пользователь X не заплатил сумму Y в течение 7 дней, он будет оцениваться как 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, как я могу это реализовать? я должен написать отдельное правило? надеюсь, вы понимаете, что я пытаюсь сказать.

спасибо

1 Ответ

1 голос
/ 09 марта 2010

Если я вас правильно понял, это невозможно. Вы должны установить в своем правиле 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, и посмотреть, сколько дней прошло.

Надеюсь, это полезно!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...