在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上下文中。示例:
- :“在输入的当前位置抛出语法错误
。此谓词设计为从\u文件/3中的error
短语\u的处理程序调用。”
- :“发出一个JSON参数。”
/
是什么意思
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中添加为引用:)终于能够在不需要批准的情况下更新标记了,这很好。