Prolog中的:-和?-有什么区别?

时间:2018-10-24 09:18:13

标签: prolog iso-prolog

此Prolog程序打印Hello

main :-
    write('Hello'), nl.

:- main.

我将(:-)/1更改为(?-)/1

main :-
    write('Hello'), nl.

?- main.

这将产生完全相同的结果。这也会打印Hello

那么(:-)/1(?-)/1有什么区别?

3 个答案:

答案 0 :(得分:4)

带有主函数(:-)/1的term的自变量称为指令。在Prolog标准中,它是在7.4.2指令中定义的。

此外,5.5.5指出:

处理器可以支持一个或多个其他指令 指标(7.4.2)作为实现的特定功能。

因此,在某些Prolog系统中,(?-)/1可作为附加的指令指示符。

答案 1 :(得分:4)

在ISO Prolog中,:-仅用于诸如运算符声明之类的指令。 ?-运算符也已定义,但未赋予其含义。

这些运算符源自1978年DEC系统10 Prolog,分别被称为命令和问题。 :- p(X).刚刚在咨询过程中测试了p(X)的成功,而?- p(X).显示了实际答案并提示您进一步的答案。因此,您在加载文件时会产生一些交互作用,而这些交互作用在后续系统中被放弃,从而使两个操作员的行为都相同。

从DEC10开始,许多系统都会将?-打印为顶层循环的提示,提醒您,读入的下一个术语将被解释为一个问题。一些系统甚至更进一步,在其前面添加了解释器提示|

答案 2 :(得分:2)

在ISO Prolog Core标准中,:-?-都被指定为前缀运算符:

Priority   Specifier   Operator(s)
...
1200       fx          :- ?-

?-前缀运算符主要是历史原因。它的语义与:-前缀运算符相同,尽管除了在Markus的答案中提到的那个语句外,我在标准中没有找到澄清它的语句。