2016-05-23 12 views
2

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ました。

+1

感謝を!私はこの配列の最初の値にどのようにアクセスできますか? – Mortalus

+0

申し訳ありません私はフラグがシックスス特有のものだと思っていました。 。ありがとうございました..あなたは答えとしてそれを投稿することができますか?私は行くように物事を把握しようとしているすべてのこれはちょっと新しい。 – Mortalus

+2

なぜ警告と非常に有用なエラーメッセージを消すのですか? (これは最初の2行です) – false

答えて

3

次はどうですか?

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

1つの節で同じ変数を2回使用してください。今のところ、スコープの問題があります。同じ名前を持つ別個の変数を使用する2つの節があります。

リストArgsの最初の項目にアクセスしたい場合は、そのような追加的な目標Args = [A1|_]追加:

:- current_prolog_flag(argv, Args), Args = [A1|_], writeq(first_arg = A1), nl. 
関連する問題