Prolog 这里是序言初学者

Prolog 这里是序言初学者,prolog,Prolog,hasAccount(个人、银行、金额)–此人在银行有一个账户,账户余额为 生活(人,城市)——人生活在城市 已创建(个人、银行、月份、年份)–该人在一年中的月份在银行开立账户 对于上面的谓词,我想尝试一些事情,比如打印一个带有帐户的名称列表,我尝试了以下查询 ?- hasAccount(Someone, Bank1, Balance1), hasAccount(Someone, Bank2, Balance2), not Bank1 = Bank2. Someone = ann Bank1

hasAccount(个人、银行、金额)
–此人在银行有一个账户,账户余额为

生活(人,城市)
——人生活在城市

已创建(个人、银行、月份、年份)
–该人在一年中的月份在银行开立账户

对于上面的谓词,我想尝试一些事情,比如打印一个带有帐户的名称列表,我尝试了以下查询

?- 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
你能解释一下为什么我要再次颠倒清单,以及我能做些什么来防止这种情况发生吗?谢谢大家!

为什么我又颠倒了清单

这是因为您在查询中没有声明足够的信息来打破对称性。 您可以使用

?- hasAccount(Someone, Bank1, Balance1), hasAccount(Someone, Bank2, Balance2), Bank1 @< Bank2.
?-hasAccount(某人,银行1,余额1),hasAccount(某人,银行2,余额2),银行1@

或者一些内置的,比如findall/3(或/3)

谢谢你的快速回答!我的班级没有覆盖这个标志。只是连词(,)和否定。到目前为止,我从中学到的东西有什么解决办法吗?请更改这个问题的标题。