2010-07-19 91 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