2014-09-20 104 views
1

hasAccount(Person,Bank,Amount) - 該人已在銀行與平衡量的賬戶,Prolog的初學者

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

請把這個問題的標題。 – 2014-09-20 14:21:15

回答

1

爲什麼我已經扭轉列表中再次

它發生,因爲你不是在你的查詢足夠的信息說明,打破對稱。 您可以改用

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

或一些內置,像的findall/3(或bagof/3)

+0

感謝您的快速回答!我的班級沒有覆蓋@<標誌。只是結合(,)和否定。到目前爲止,我能從中學到什麼? – user1830954 2014-09-20 05:56:06