Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Prolog递归规则错误的结果_Prolog - Fatal编程技术网

Prolog递归规则错误的结果

Prolog递归规则错误的结果,prolog,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(_), in

我定义了一个递归规则,但结果似乎不正确

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序言返回了 X=彼得; X=彼得

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

请帮忙


谢谢

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

isseniorcitizen(peter)。queryHm,不是isseniorcitizen(X)?isseniorcitizen(peter)是一个事实,应该给出“是”。顺便说一句,您的示例中没有递归(谓词本身调用)。您能提供一些递归规则示例吗?我没有两次指定peter是老年公民。isseniorcitizen(彼得)。这是一个疑问。如何解决?谢谢。把它放进档案里,就成了事实。在提示下输入查询。