Command line 在命令行中使用swipl运行prolog代码
我正在搜索Command line 在命令行中使用swipl运行prolog代码,command-line,prolog,server,swi-prolog,Command Line,Prolog,Server,Swi Prolog,我正在搜索swipl类似于perl-e 特别是,我希望以这种方式运行prolog代码: swipl --wanted-flag "fact(a). message:-writeln('hello')." -g "message" -t halt 这是可能的 swipl -f file -g "message" -t halt 其中prolog子句写在文件中 我在服务器端运行swipl,它将用户输入作为prolog子句,因此在服务器上编写文件不是一个好主意。您可以做的一件事是使用标准输入,而
swipl
类似于perl-e
特别是,我希望以这种方式运行prolog代码:
swipl --wanted-flag "fact(a). message:-writeln('hello')." -g "message" -t halt
这是可能的
swipl -f file -g "message" -t halt
其中prolog子句写在文件中
我在服务器端运行swipl,它将用户输入作为prolog子句,因此在服务器上编写文件不是一个好主意。您可以做的一件事是使用标准输入,而不是从参数加载(我想您仍然可以将入口点作为参数传递): 在stdin.pl的文件
中说:
main :-
load_files(stdin, [stream(user_input)]),
current_prolog_flag(argv, [Goal|_]),
call(Goal),
halt.
main :- halt(1).
有了这个,你可以做到:
$ echo 'message :- format("hello~n").' | swipl -q -t main fromstdin.pl -- message
|: hello
@false to的注释和问题将告诉您这是什么:
,如果您想知道,但如果它让您烦恼,请执行以下操作:
$ echo 'message :- format("hello~n").' \
| swipl -q -t main fromstdin.pl -- message \
| cat
hello
相反
这将允许您从标准输入读取任何Prolog,并从中调用任意谓词。我不知道这样做是否明智。如果有更简单的方法实现同样的效果,我也不会感到惊讶。您可以预处理输入(很容易使用read/1
等,因为Prolog程序自然地表示为一系列Prolog术语)和带有assertz/1
的assert子句。在您的示例中,SWI Prolog的最终调用可能是swipl-g“assertz(事实(a)),assertz(message:-writeln('hello')),message“-t halt
,预处理后。您的代码对我有效,但在我为应用程序修改它时无效。我的序言代码还包含指令(例如:-op(601,xfx,(/)。
)。它还使用编译好的prolog代码,我使用以下命令行命令:echo“bla bla…”swipl-x binary-t main load_code.pl--“online_demo(1)”
,其中online_demo/1
是在binary
中定义的。错误如下:error:“”/1:未定义的过程:main/1错误:但是,存在以下定义:error:main/0