2017-11-18 135 views
0

我有这个事实或数据库序言,看看教育是否相同或不足。例如高中< =高中是真的,高中< = phd也是如此,但是高中< =高中是错误的。如何停止在prolog中打印两次相同的值?

edu_less(high_school, bachelor). 
edu_less(bachelor, masters). 
edu_less(masters, phd). 

edu_lessOrEqual(X,X). 
edu_lessOrEqual(X, Y):- edu_less(X,Y). 
edu_lessOrEqual(X, Y):- edu_less(X,Z), 
         edu_lessOrEqual(Z,Y). 

但这输出

edu_lessOrEqual(masters, phd). 
true; 
true; 
false. 

时,我想只有一个真正的在输出打印。

true; 
false. 

回答

2

基本上,这是因为edu_lessOrEqual/2第一部分中,您递归调用edu_lessOrEqual/2,所以你风与Z和Y同时实例化phdphd其实等于phd所以它满足的情况下,你已经阐明的逻辑)。你可以通过在第三个子句的最后添加Z \= Y来纠正它,但是这种情况下我会试图使用一个条件语句来确保我没有结束无用的选择点。

相关问题