第二条规则中的intersect(L1,L2,L3)
如何运作?有人可以追踪我吗?仍然是Prolog的初学者。
intersect([],L,[]).
intersect([A|L1],L2,[A|L3]) :-
member(A,L2),
intersect(L1,L2,L3).
答案 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]
。