如何访问 SICStus Prolog 中的命令行参数?
How do I access command line arguments in SICStus Prolog?
我正在尝试创建一个 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
所以我认为我的做法不正确。
下面的怎么样?
:- current_prolog_flag(argv, Arguments), writeq(Arguments), nl.
确保在一个子句中两次使用同一个变量!到目前为止,您遇到了范围界定问题:您有两个子句使用具有相同名称的不同变量。
如果您想访问列表 Args
的第一项,请添加一个额外的目标 Args = [A1|_]
,如下所示:
:- current_prolog_flag(argv, Args), Args = [A1|_], writeq(first_arg = A1), nl.
我正在尝试创建一个 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
所以我认为我的做法不正确。
下面的怎么样?
:- current_prolog_flag(argv, Arguments), writeq(Arguments), nl.
确保在一个子句中两次使用同一个变量!到目前为止,您遇到了范围界定问题:您有两个子句使用具有相同名称的不同变量。
如果您想访问列表 Args
的第一项,请添加一个额外的目标 Args = [A1|_]
,如下所示:
:- current_prolog_flag(argv, Args), Args = [A1|_], writeq(first_arg = A1), nl.