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

Flu*_*lux 5 prolog iso-prolog

这个Prolog程序打印Hello:

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

:- main.
Run Code Online (Sandbox Code Playgroud)

我改(:-)/1(?-)/1:

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

?- main.
Run Code Online (Sandbox Code Playgroud)

这产生完全相同的结果.这也打印Hello.

那么(:-)/1和之间的区别是(?-)/1什么?

mat*_*mat 4

term 与主函子的参数(:-)/1称为指令。在 Prolog 标准中,它是在 7.4.2 指令中定义的。

此外,5.5.5 规定:

处理器可以支持一个或多个附加指令指示符(7.4.2)作为实现特定的功能。

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

  • 是的,您可以看到 `?-(D)` 在内部被完全视为 `:-(D)`:https://github.com/SWI-Prolog/swipl-devel/blob/99b4a92c93077a0ab9e04d6e7549c29fc8d3c57d/boot/init。 pl#L2660 但是,使用 `(:-)/1` 作为指令是常见(和标准)做法。这适用于所有 Prolog 系统。请注意,您应该使用“initialization/1”指令来可移植地执行 Prolog 代码。例如,编写`:-初始化main.` (2认同)