Prolog递归规则错误的结果

时间:2010-07-19 09:21:44

标签: 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 =彼得; X =彼得。

为什么它返回两次而不是一次?

请帮忙。

感谢。

1 个答案:

答案 0 :(得分:2)

一个简单的问题是,你已经说过,彼得是两次老年人;首先通过将程序中的“数据库”添加到程序中的第一顺序逻辑,然后简单地说明他是程序底部的老年人。我之前的回答(添加一个切口)也是正确的,但错过了问题;在发现peter成为匹配原子后,它会取消对统一变量X的搜索,因此不会进入其他X-es而不是peter。