Prolog参数模式指示器导致输出错误

Prolog argument mode indicator causes output false

我正在尝试在我的方法签名中使用 Prolog 的参数模式指示器 (https://www.swi-prolog.org/pldoc/man?section=argmode)。

没有指标,我的函数按预期工作(例如 palindrome([1,2,1]) 给出 true):

palindrome(List) :- 
     reverse(List, List) 

但是当我说

palindrome(+List) :- 
    reverse(List, List) 

我每次都是假的。我没有收到任何错误或警告。我也尝试了以下但没有运气:

palindrome(+List) :- 
    reverse(+List, +List) 

所以我很确定我以某种方式错误地使用了这些指标。谁能帮忙?我正在使用 SWI-Prolog 和在线 SWISH IDE。

是的,错了。您根本不应该在代码中使用它们。仅在评论.

+ 被解释为一个单独的标记:

6 ?- atom(+X).
false.

7 ?- +X =.. Z.
Z = [+, X].

8 ?- +X = + X.
true.

9 ?- +X = '+'(X).
true.

可以使用+-using 谓词定义,但它毫无意义:

14 ?- [user].
bar(+X,+X).
|: 
true.

15 ?- bar( + 1, +Z).
Z = 1.

有一些语言可以让我们声明模式,就像我认为 Mercury 那样。但不是序言。在 Prolog 中,我们仅将其用作注释,以指导我们对代码的使用和理解。