2010-07-19 60 views
0

我已經定義了遞歸規則,但結果看起來不正確。Prolog遞歸規則錯誤結果

customer(peter,bank(maybank),customertype(personal), 
citizen(malaysian),age(62),credit(50000), 
income(3000),property(car)). 

isseniorcitizen(X) :- customer(X, bank(_),customertype(_), 
citizen(malaysian),age(Age),credit(_), 
income(_),property(_)), 
Age >= 60. 

lowerinterest(Senior) :- isseniorcitizen(Senior). 

isseniorcitizen(peter). 

但是SWI-Prolog返回 X = peter; X =彼得。

爲什麼它返回兩次而不是一次?

請幫忙。

謝謝。

+0

您的查詢是什麼? – ShiDoiSi 2010-07-19 09:42:26

+1

isseniorcitizen(peter)。查詢 – peterwkc 2010-07-19 09:53:25

+0

嗯,不是isseniorcitizen(X)? isseniorcitizen(彼得)是一個事實,應該產生「是」。 – ShiDoiSi 2010-07-19 11:35:08

回答

2

簡單的問題是,你說過彼得是老年人兩次;首先通過將程序添加到頂部的「數據庫」中,然後簡單地聲明他是程序底部的老年公民,通過程序中的一階邏輯。我以前的回答(添加剪輯)也是正確的,但錯過了這個問題;它會在找到peter爲匹配原子後取消統一變量X的搜索,因此不會比peter進展到其他X-es。

+0

我沒有指定彼得是老年人的兩倍。 isseniorcitizen(彼得)。這是一個查詢。 如何解決? 謝謝。 – peterwkc 2010-07-19 09:54:18

+0

把它放在文件中就成了事實。查詢在提示符處輸入。 – 2010-07-19 11:25:17

+0

感謝您的解釋。 – peterwkc 2010-07-21 02:16:35