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

如何在SICStus Prolog中访问命令行参数?,prolog,command-line-arguments,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 Fi

我正在尝试创建一个
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\u 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\u program.pl
中所看到的,我已经尝试了

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

。。。但是输出是
\u28247
,所以我认为我没有正确的方法

:- current_prolog_flag(argv, Arguments), writeq(Arguments), nl.
确保在一个子句中使用同一变量两次!到目前为止,您遇到了一个范围问题:有两个子句使用具有相同名称的不同变量

如果要访问列表
Args
的第一项,请添加一个额外的目标
Args=[A1 | |]
,如下所示:

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

谢谢那奏效了。。我怎样才能访问这个数组中的第一个值呢?对不起,我以为这些标志是sicstus特定的。非常感谢。你能把它贴出来作为答复吗?我会记下来的。。在这一切中,我是个新手,在前进的过程中试图弄明白事情的真相。。谢谢为什么要关闭警告和非常有用的错误消息?(这是前两行)