假设以下程序:
它非常适用于两个数字求和,但当我尝试进行以下类型的查询时:
nat(0).
nat(s(N)) :- nat(N).
/* 0+b=b */
plus(0,B,B) :- nat(B).
/* (a+1)+b = c iff a+(b+1)=c */
plus(s(A),B,C) :- plus(A,s(B),C).
它非常适用于两个数字求和,但当我尝试进行以下类型的查询时:
plus(Z,Z,s(0)).
在明显没有解决方案的情况下(即Z>s(0)
),它继续搜索Z
的可能值。
我熟悉!
运算符,我的直觉告诉我解决方案与它有关,只是我不确定如何在这种情况下使用它。