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 中,我们仅将其用作注释,以指导我们对代码的使用和理解。
我正在尝试在我的方法签名中使用 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 中,我们仅将其用作注释,以指导我们对代码的使用和理解。