【问题标题】:Prolog argument mode indicator causes output falseProlog 参数模式指示符导致输出错误
【发布时间】:2023-03-16 22:18:01
【问题描述】:

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

没有指标,我的功能按预期工作(例如,palindrome([1,2,1]) 为真):

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

但是当我说

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

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

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

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

【问题讨论】:

    标签: syntax prolog


    【解决方案1】:

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

    + 被解释为一个单独的令牌:

    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 中,我们仅将其用作 cmets,以指导我们对代码的使用和理解。

    【讨论】:

      猜你喜欢
      • 2012-06-05
      • 2013-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多