如何在SICStus Prolog中访问命令行参数?

时间:2016-05-23 07:12:55

标签: prolog command-line-arguments

我正在尝试创建一个cmd(批处理)文件,该文件将使用SICStus编译和构建Prolog程序。

我这里有cmd代码:

call "c:\Program Files (x86)\SICStus Prolog VC12 4.3.2\bin\sicstus.exe" -l build_program.pl
call "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\vcvars32.bat"
call "C:\Program Files (x86)\SICStus Prolog VC12 4.3.2\bin\spld.exe" --output="program.exe" --static "program.sav"

build_program.pl是:

:- set_prolog_flag(unknown, fail).
:- set_prolog_flag(redefine_warnings, off).

:- nl, nl, nl.

:- prolog_flag(argv, Args).
:- write(Args).
:- prolog:set_current_directory('source/program').
:- compile(program).

:- nl, nl, nl.

:- halt.

现在我知道我可以使用-a向SICStus发送参数,但我不确定发送它们或访问它们的正确方法是什么。

正如您在build_program.pl中看到的那样,我试过......

:- prolog_flag(argv, Args).
:- write(Args).

...但输出为_282447,所以我不认为我是以正确的方式做到的。

1 个答案:

答案 0 :(得分:3)

以下情况如何?

:- current_prolog_flag(argv, Arguments), writeq(Arguments), nl.

确保在一个子句中两次使用相同的变量!到目前为止,您遇到了一个范围问题:您有两个使用具有相同名称的不同变量的子句。

如果您想访问列表Args的第一项,请添加其他目标Args = [A1|_],如下所示:

:- current_prolog_flag(argv, Args), Args = [A1|_], writeq(first_arg = A1), nl.