Prolog 从两个目标中扣除
假设我有这样的目标:Prolog 从两个目标中扣除,prolog,Prolog,假设我有这样的目标: times(0,_,0). % zero times X is zero times(X,Y,Z) :- times(Y,X,Z) ,!. % X * Y = Y * X 当我试图问: ?- times(0,1,X). 我得到了双重答案: X = 0 ; X = 0. 可能是因为第一个答案是从事实推导出来的,第二个答案是从规则推导出来的。 问题-如何使序言只给出一个答案而不是两个答案?添加一个剪辑以“确认”
times(0,_,0). % zero times X is zero
times(X,Y,Z) :- times(Y,X,Z) ,!. % X * Y = Y * X
当我试图问:
?- times(0,1,X).
我得到了双重答案:
X = 0 ;
X = 0.
可能是因为第一个答案是从事实
推导出来的,第二个答案是从规则
推导出来的。
问题-如何使序言只给出一个答案而不是两个答案?添加一个剪辑以“确认”第一个选项:
times(0,_,0) :- !.
或从第二个开始禁止0:
times(X,Y,Z) :- X \= 0, times(Y,X,Z).
我已删除剪切,但如果有更多规则,请保留它。
但我认为“反身性”规则会给你带来麻烦,因为它会过度递归 你必须这样做。添加事实,然后添加对这些事实起作用的规则。或者对我来说可读性更好:
times(0,0):-true代码>:-)