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
您能否解释为什么我会再次提出逆转清单以及我可以采取哪些措施来防止这种情况发生?谢谢!
答案 0 :(得分:1)
为什么我再次颠倒列表
它发生了,因为您没有在查询中说明足够的信息来破坏对称性。 你可以改用
?- hasAccount(Someone, Bank1, Balance1), hasAccount(Someone, Bank2, Balance2), Bank1 @< Bank2.
或某些内置内容,例如findall / 3(或bagof / 3)