Prolog-使用concat的成员规则

Prolog-使用concat的成员规则,prolog,Prolog,有人能解释一下这个成员规则是如何使用连接的吗?我想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 Prolog谓词通常以不同的方式工作。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

Prolog谓词通常以不同的方式工作。Concat可用于创建列表,但也可用于将一个列表拆分为两个。在本例中,读取concat调用的一种方法是

是否存在列表
L1
[X | L2]
,以便它们的串联是
L

因为X是第二个列表的头,你知道如果这个语句是真的,那么X就是L的一个成员

在该示例中,L1将与[](即
a
之前的所有元素)统一,L2将与[b,c](
a
之后的所有元素)统一