任何人都可以解释这个成员规则如何使用连接?我认为concat只返回一个新列表而不是查看一个元素是否在列表中。 Concat规则来自我的教科书。
concat([ ], L, L).
concat([H|T], L, [H|M]) :- concat(T, L, M).
member(X, L) :- concat(L1, [X | L2], L).
ex) member(a, [a, b, c]) => True
答案 0 :(得分:2)
Prolog谓词通常以不同的方式工作。 Concat可用于创建列表,但也可用于将一个列表拆分为两个。在这种情况下,读取concat调用的一种方法是
是否有
L1
和[X|L2]
列表,以使其连接为L
?
因为X是第二个列表的头部,你知道如果这个陈述是真的,那么X就是L的成员。
在该示例中,L1将与[](即a
之前的所有元素)统一,L2将与[b,c](a
之后的所有元素)统一。