Prolog初学者在这里

时间:2014-09-20 04:18:18

标签: prolog

hasAccount(Person,Bank,Amount) - 此人在银行拥有余额金额的帐户,

lives(Person,City) - 此人居住在城市,

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

根据上面的谓词,我想尝试一些事情,比如用他们拥有的帐户打印一个名单列表,我尝试了以下查询。

?- hasAccount(Someone, Bank1, Balance1), hasAccount(Someone, Bank2, Balance2), not Bank1 = Bank2.

Someone = ann

Bank1 = metro_credit_union

Balance1 = 1000

Bank2 = toronto_dominion

Balance2 = 12000

Yes (0.00s cpu, solution 1, maybe more)

Someone = ann

Bank1 = toronto_dominion

Balance1 = 12000

Bank2 = metro_credit_union

Balance2 = 1000

您能否解释为什么我会再次提出逆转清单以及我可以采取哪些措施来防止这种情况发生?谢谢!

1 个答案:

答案 0 :(得分:1)

  

为什么我再次颠倒列表

它发生了,因为您没有在查询中说明足够的信息来破坏对称性。 你可以改用

?- hasAccount(Someone, Bank1, Balance1), hasAccount(Someone, Bank2, Balance2), Bank1 @< Bank2.

或某些内置内容,例如findall / 3(或bagof / 3)