在Prolog中,出现在DCGs上下文中的谓词名称后面的双斜杠“/”是什么意思?

在Prolog中,出现在DCGs上下文中的谓词名称后面的双斜杠“/”是什么意思?,prolog,dcg,dcg-semicontext,Prolog,Dcg,Dcg Semicontext,一些“谓词指示符”(这是表示谓词或函子的语法name/arity表达式(这两个术语都是等效的)不满足于使用一个斜杠,而是实际使用两个斜杠。这通常发生在DCGs上下文中。示例: :“在输入的当前位置抛出语法错误error。此谓词设计为从\u文件/3中的短语\u的处理程序调用。” :“发出一个JSON参数。” 在Prolog中,出现在DCGs上下文中的谓词名称后面的双斜杠/是什么意思 Prolog的术语重写系统(SWI Prolog)使用它,但对于个人来说,它让您知道谓词是DCG,并且在谓词的末

一些“谓词指示符”(这是表示谓词或函子的语法
name/arity
表达式(这两个术语都是等效的)不满足于使用一个斜杠,而是实际使用两个斜杠。这通常发生在DCGs上下文中。示例:

  • :“在输入的当前位置抛出语法错误
    error
    。此谓词设计为从\u文件/3中的
    短语\u的处理程序调用。”
  • :“发出一个JSON参数。”
在Prolog中,出现在DCGs上下文中的谓词名称后面的双斜杠
/
是什么意思

Prolog的术语重写系统(SWI Prolog)使用它,但对于个人来说,它让您知道谓词是DCG,并且在谓词的末尾添加了两个隐藏参数

例如,这里有一个非常简单的DCG,它有一个可见参数

simple_dcg(X) -->
    { X is 1 + 2 }.
当看到列表时

?- listing(simple_dcg).
simple_dcg(X, A, B) :-
    X is 1+2,
    B=A.

true.
出现两个额外的隐藏参数(
A,B


如果您一直在SWI Prolog论坛上关注我的EDCG,那么您知道它会变得更加复杂。

根据WDTR 13211-3(3.19),这被称为非终端指示器。与谓词指示器(3.131)类似,它用于表示一个特定的非终端


请注意,大多数实现将非终结符nt
/
n转换为谓词nt
/
n+2。但是,您不能依赖精确的转换方式。因此,通过调用相应的谓词直接调用非终结符的结果,也就是说,没有定义具有相同名称和两个额外参数的谓词。尤其是r第二个额外的论点必须小心处理。直接使用可能会违反稳定性,特别是在使用时。

请参见。在问题中添加了完整性文本。@DavidTonhofer我开始使用DCGs,但本应以差异列表开始,然后转到DCGs,但现在转到EDCGs,我只将其视为一种实现这一点的途径方法更多。不确定哪种方法可以超越EDCGs,因为它涉及到更多的论文而不是实用代码,因此必须学习。非常高兴在SWI Prolog论坛上讨论。暂时不讨论,但谢谢。我需要首先清理我的很多问题。相关博客文章:“DCGs提供线程状态抽象:不要破坏它”@@PauloMoura在DCG中添加为引用:)终于能够在不需要批准的情况下更新标记了,这很好。