Prolog - 使用concat的成员规则

时间:2014-12-01 04:09:41

标签: 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

1 个答案:

答案 0 :(得分:2)

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

  

是否有L1[X|L2]列表,以使其连接为L

因为X是第二个列表的头部,你知道如果这个陈述是真的,那么X就是L的成员。

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