Prolog 中的 :- 和 ?- 有什么区别?
What is the difference between :- and ?- in Prolog?
这个 Prolog 程序打印 Hello
:
main :-
write('Hello'), nl.
:- main.
我把(:-)/1
改成(?-)/1
:
main :-
write('Hello'), nl.
?- main.
这会产生完全相同的结果。这也会打印 Hello
.
那么(:-)/1
和(?-)/1
有什么区别呢?
主函子 (:-)/1
的 term 参数称为 指令 。在 Prolog 标准中,它在 7.4.2 指令中定义。
此外,5.5.5 指出:
A processor may support one or more additional directive
indicators (7.4.2) as an implementation specific feature.
因此,在某些 Prolog 系统中,(?-)/1
可用作附加指令指示符。
:-
和 ?-
都被指定为 ISO Prolog Core 标准中的前缀运算符:
Priority Specifier Operator(s)
...
1200 fx :- ?-
?-
前缀运算符主要是有历史原因。它的语义与 :-
前缀运算符相同,尽管除了 Markus 的回答中提到的那个之外,我没有在标准中找到澄清它的声明。
在 ISO Prolog 中,:-
仅用于运算符声明等指令。还定义了 ?-
运算符,但没有赋予它任何意义。
这些运算符源于 ~1978 年的 DEC 系统 10 Prolog,它们分别被称为命令和问题。虽然 :- p(X).
刚刚在咨询期间测试了 p(X)
的成功,但 ?- p(X).
显示了实际答案并提示进一步的答案。因此,您在加载文件时获得了一些交互,这些交互在后续系统中被放弃,使两个操作员的行为相同。
从12月10日开始,许多系统打印?-
作为顶层循环的提示,提醒读入的下一个术语将被解释并作为问题回答。有些系统更进一步,在其前面添加解释器提示 |
。
这个 Prolog 程序打印 Hello
:
main :-
write('Hello'), nl.
:- main.
我把(:-)/1
改成(?-)/1
:
main :-
write('Hello'), nl.
?- main.
这会产生完全相同的结果。这也会打印 Hello
.
那么(:-)/1
和(?-)/1
有什么区别呢?
主函子 (:-)/1
的 term 参数称为 指令 。在 Prolog 标准中,它在 7.4.2 指令中定义。
此外,5.5.5 指出:
A processor may support one or more additional directive indicators (7.4.2) as an implementation specific feature.
因此,在某些 Prolog 系统中,(?-)/1
可用作附加指令指示符。
:-
和 ?-
都被指定为 ISO Prolog Core 标准中的前缀运算符:
Priority Specifier Operator(s)
...
1200 fx :- ?-
?-
前缀运算符主要是有历史原因。它的语义与 :-
前缀运算符相同,尽管除了 Markus 的回答中提到的那个之外,我没有在标准中找到澄清它的声明。
在 ISO Prolog 中,:-
仅用于运算符声明等指令。还定义了 ?-
运算符,但没有赋予它任何意义。
这些运算符源于 ~1978 年的 DEC 系统 10 Prolog,它们分别被称为命令和问题。虽然 :- p(X).
刚刚在咨询期间测试了 p(X)
的成功,但 ?- p(X).
显示了实际答案并提示进一步的答案。因此,您在加载文件时获得了一些交互,这些交互在后续系统中被放弃,使两个操作员的行为相同。
从12月10日开始,许多系统打印?-
作为顶层循环的提示,提醒读入的下一个术语将被解释并作为问题回答。有些系统更进一步,在其前面添加解释器提示 |
。