2010-03-09 4 views
3

기본적으로 말한 프롤로그에 규칙을 작성하고 싶습니다. 사용자 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 

규칙이 작동을하지만, 누군가가 3 일 다음 절은 평가하지 않습니다에 빌린 경우 문제는 시스템에 예를 들어, 일 + 7 부분이다 true는 Days가 항상 3 일 것입니다. 어떻게 구현할 수 있습니까? 나는 별도의 규칙을 써야합니까 ?? 나는 무엇을 말하려고하는지 이해하기를 바랍니다.

감사합니다.

+0

여기 문제 공간에 대해 고심하고 있습니다. 나는 그들이 돈을 빌린 날짜가 현재 날짜와 연관되어 있는지를 예상하여 현재 날짜 - 빌린 날짜가 7 일 이상인지를 판단합니다. '차일'이 무엇을 의미하는지 잘 모르겠다. 차용 이후로 계산해야하며 채워지지 않은 계좌가 있는지 확인해야합니다. 이것은 숙제처럼 보이기에 충분히 추상적입니다. – Lazarus

+0

나는 그게 숙제가 아니라고 확신한다. 나는 이미 대학을 마쳤다! – KP65

답변

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 ... 

그런 다음 현재 날짜로이 날짜를 비교 owes_money 술어에서 얻은 내용으로 CurrDay와 경과 일 수를 확인하십시오.

희망이 있습니다.

+0

나는 당신이 나에게 주었던 것과 놀 것입니다. 나는 실제로 의무 관리를 연구하고 있습니다. 다른 질문을 보면, 누군가 나를 위해 뭔가를하도록 "묻지"않는 경우가 종종 있습니다. 나는 프롤로그에 대한 지식이 극히 제한되어 있고 숙제가 아니라고 말한 것처럼 최선을 다하고 있습니다! 나는 정직하기 위해 수년 동안 어떤 숙제도하지 않았습니다! 답장을 보내 주셔서 감사합니다 – KP65

+0

충분히 공정한 ... 필요하면 더 멀리 당신을 도울 것입니다. – anthares

관련 문제