2016-05-23 74 views
2

我試圖創建一個cmd(批處理)文件,它將使用SICStus編譯和構建Prolog程序。如何訪問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

謝謝!那工作..以及如何訪問此數組中的第一個值? – Mortalus

+0

抱歉,我認爲這些標誌是特定於sicstus的。 。謝謝你..你可以張貼它作爲一個答案虐待它標記..林有點新的所有這試圖找出事情,因爲我去..謝謝! – Mortalus

+2

爲什麼關閉警告和非常有用的錯誤信息? (這是前兩行) – false

回答

3

以下情況如何?

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

請確保您在一個子句中使用兩次相同的變量!到目前爲止,您有一個範圍界定問題:您有兩個使用具有相同名稱的不同變量的子句。

如果您想訪問列表Args的第一個項目,添加一個額外的目標Args = [A1|_]像這樣:

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