我正在尝试从命令行执行序言脚本。我的尝试基于How to run SWI-Prolog from the command line?的发现但是,这不适用于任何非平凡的示例(即该“ hello world”示例以外的任何示例)。
:- initialization(main, program).
main :-
parent(pam,bob).
parent(tom,bob).
parent(tom,liz).
parent(bob,ann).
parent(bob,pat).
parent(pat,jim).
parent(X,jim).
halt.
我用$ swipl -q -s temp.p
执行此操作并收到以下错误
Warning: temp.p:10:
Singleton variables: [X]
ERROR: temp.p:11:
No permission to modify static procedure `halt/0'
Defined at /opt/local/lib/swipl/boot/init.pl:3867
我如何从命令行执行此操作,获得结果,但不保留给代表?
您最大的问题是您的源代码有很多问题。我已经像这样修复了它们:
parent(pam,bob).
parent(tom,bob).
parent(tom,liz).
parent(bob,ann).
parent(bob,pat).
parent(pat,jim).
main :-
parent(X,jim),
format('~a is the parent of jim~n', [X]),
halt.
现在程序没有错误,您可以通过在命令行上提供目标来执行它而无需返回到REPL:
$ swipl -q -s temp.pl -g main
pat is the parent of jim
$