这些谓词在 Prolog 中做什么

What do these predicates do in Prolog

我不明白以下 4 个谓词的具体作用:

predicate1([H1,H2|T1],X)  :− 
    append([H1,H2|T1],[H2,H1|T1],X).

predicate2wrapper(In, Out) :- 
    predicate2([ ], In, Out).
predicate2(L, [ ], L).
predicate2(A,[H| T], Out) :- 
    predicate2([H,H|A],T, Out).

predicate3([X,X], [X,X|_]).
predicate3([X,X], [_,H|T]) :− 
    predicate3([X,X],[H|T]).

predicate4([ ], _) .
predicate4([H|T], L) :−
    member(H,L), 
    predicate4(T,L).

我知道所有这些谓词都将列表作为它们的参数,我也尝试 运行 它们,但我总是收到 Syntax error: operator expected 警告。

谁能帮我理解这些谓词的作用,也许还能帮我解决这个错误?

您是从 pdf 还是 word 文档复制的? :- 中的 - 符号不是减号 - 这是导致错误的原因。重新键入它们以解决问题,然后您可以分析谓词。如何知道看起来相同的字符是否不同?我建议使用 diff 工具(一个比较文件的程序,作为命令行或使用 gui (winmerge),甚至可用 online) or an ascii to hex converter like this.

示例查询提示您这些谓词的作用:

?- predicate1([1,2,3],L).
?- append([1,2,3],[4,5],L).
?- predicate2wrapper([1,2,3],L).
?- predicate3([c,c],[a,a,b,b]).
?- predicate3([b,b],[a,a,b,b,c,c]).
?- predicate3([X,X],[a,a,c,b,b]).
?- predicate4([a,b],[a,c,b]).
?- predicate4([a,d],[a,c,b]).
?- member(a,[a,c,b]).
?- member(d,[a,c,b]).