2014-09-21 81 views
0

鉴于谓词Prolog的查询初学者

  • hasAccount(Person,Bank,Amount) - 这个人有一个帐户在银行,其余金额

  • lives(Person,City) - 的人住在城市

  • created(Person,Bank,Month,Year) - 该人在本年度的月份在银行开立账户

你怎么会找到只用谁的人有最古老的账户在同一家银行下面的“-,<=<>>=not”运营商?我深深地迷失了!

+1

尝试句话另一种说法:最早的帐户是以下属性不支持的帐户:存在较旧的帐户(“<”年或“=”年和“<”月)。 – danielp 2014-09-21 04:35:33

+0

我的查询类似于创建(Who,somebank,Month1,Year1),创建(Someone,somebank,Month2,Year2)和比较Month1&2和Year1&2。这是一个正确的方法吗? – user1830954 2014-09-21 06:13:53

+0

是的,但您必须否定第二部分(请参阅下面的答案) – danielp 2014-09-22 07:48:13

回答

0

基于您的评论,\+用于not(不proveable):

created(Who,Somebank,Month1,Year1), 
\+ (created(_,Somebank,Month2,Year2), older(Month2,Year2,Month1,Year1)) 

older/4定义为:

older(_Month2,Year2,_Month1,Year1) :- Year2 < Year1. 
older(Month2,Year,Month1,Year) :- Month2 < Month1.