因此,我有一些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程序直接从外壳运行。您可以看一下这个问题和答案:
我个人的喜好现在是拥有这样的文件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是约定俗成的,可以用其他任何名称。
有关其他选项,请参见链接的问题和答案。