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