Prolog中的递归方式

时间:2017-12-15 09:39:05

标签: prolog

第二条规则中的intersect(L1,L2,L3)如何运作?有人可以追踪我吗?仍然是Prolog的初学者。

intersect([],L,[]).
intersect([A|L1],L2,[A|L3]) :-
   member(A,L2),
   intersect(L1,L2,L3).

1 个答案:

答案 0 :(得分:2)

第二条规则意味着:

If the head of the first list is present in the second list,
then it is also present in the third.

考虑列表L1 = [a, b, c]L2 = [d, b]。我们按如下方式计算他们的切口:

intersect([a|[b,c]], L2, [a|L3]) :- member(a, L2), intersect([b,c], L2, L3)

a不在L2中,所以这是错误的。程序:

intersect([b|[c]], L2, [b|L3]) :- member(b, L2), intersect([c], L2, L3)
b中的

L2 ,因此b位于交叉路口。程序:

intersect([c|[]], L2, [c|L3]) :- member(c, L2), intersect([], L2, L3)

c不在L2中,所以这是假的。程序:

intersect([], L2, [])

这是基本情况。所以交点是[b]