以脚本形式运行序言

Pet*_*ter 2 prolog swi-prolog

因此,我有一些Prolog代码可以对变量分配进行建模,例如以一种编程语言进行建模,并尝试查看它们是否相互兼容。所以,

assigned(X, X).
and(P, Q) :- P, Q.
or(P, Q) :- P.
or(P, Q) :- Q.

% and then we should test an expression like this:
and(assigned(X, 5), assigned(X, 6)).
Run Code Online (Sandbox Code Playgroud)

由于X不能同时分配给5和6 ,因此最后一个表达式失败。

现在,我想做的就是让这个测试具有单个表达式(可以并且应该将其硬编码到文件中),然后简单地打印出是否能够满足要求。但是似乎SWIPL 确实希望我能够交互式运行。理想情况是这样的:

> ./test-assignments
false.
Run Code Online (Sandbox Code Playgroud)

当然可以吗?我在这方面机智。

小智 5

有几种方法可以使SWI-Prolog程序直接从外壳运行。您可以看一下这个问题和答案:

如何从命令行运行SWI-Prolog?

我个人的喜好现在是拥有这样的文件example.pl

:- set_prolog_flag(verbose, silent).
:- initialization(main).

main :-
    format('Example script~n'),
    current_prolog_flag(argv, Argv),
    format('Called with ~q~n', [Argv]),
    halt.
main :-
    halt(1).
Run Code Online (Sandbox Code Playgroud)

然后我从命令行运行:

$ swipl example.pl and a few arguments
Example script
Called with [and,a,few,arguments]
Run Code Online (Sandbox Code Playgroud)

初始化指令告诉解释器在加载程序后要评估哪个目标:这里是main/0。名称main是约定俗成的,可以用其他任何名称。

有关其他选项,请参见链接的问题和答案。