我如何从命令行运行序言文件,而不是复制到副本?

问题描述 投票:0回答:1

我正在尝试从命令行执行序言脚本。我的尝试基于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

我如何从命令行执行此操作,获得结果,但不保留给代表?

prolog swi-prolog
1个回答
1
投票

您最大的问题是您的源代码有很多问题。我已经像这样修复了它们:

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
$
© www.soinside.com 2019 - 2024. All rights reserved.