简要说明序言计划是如何工作的?考虑下面给出的Prolog程序


test(X,[ ],0).
test(X,[H|T], N) :- H >= X, test (X,T,N1), N is N1+1.
test (X,[H|T], N) :- H < X, test (X,T,N).

使用上述Prolog程序绘制以下查询的搜索(派生(树。

|?- test (7,[9, 5, 2, 10, 7,8], N) . 

这是一个简单的递归:用3种不同的情况调用谓词到本身,因此,它在列表中传播,将其元素与给定的元素与给定的元素进行比较。

基本情况(第一个谓词(是列表为空,因此没有比给定的元素更大或相等的元素。第二和第三个谓词将列表(h(的第一个元素与给定的(x(进行比较,如果h大于或等于x,那么我们处于第二个谓词中,因此我们总和1总计1在列表的其余部分进行相同的操作。否则,如果H小于X,则我们返回在列表的其余部分应用谓词的结果。

很容易看到,例如调用

测试(2,[1,2,3],n(。

n将为2:

测试(2,[1,2,3],2( -> test(2,[2,3],2( -> test(2,[3],1( -> test(2,[[2,[],0(。

最新更新