0

SWI-Prolog の CGI ライブラリで input type="hidden" フォームを渡す際に問題があります。具体的には、次のことを行います。

<form id="frmCGIPrologIni" name="frmCGIPrologIni" method="post" action="http://localhost/cgi-bin/x.pl"> <p><input type="hidden" name="initial" value="ini" /> <input class="submit" type="submit" value="Start" /> </p></form>

プログラム x.pl が呼び出すとき、cgi_get_form(Arguments)引数は Name(Value) 用語のリスト、つまり [Name, Value] である必要があるため、[initial(ini)] である必要があります。

しかし、これを使用すると、エラー: =../2: 引数が十分にインスタンス化されていません

print_args([]).
print_args([F|T]) :- % with Arguments
    F =.. [Name, Value], % and should continue doing things

write(Arguments) を使用して手動で印刷しようとしましたが、得られるものは:_L160で、最初の要素の印刷は:_G472で、 write_canonical(Arguments) は次を返します:'.'(_,_)

チェックのためだけに method="get" も使用してみましたが、URI が正しく出力されるhttp://localhost/cgi-bin/x.pl?initial=iniので、送信の問題ではなく、cgi_get_form(Arguments) での処理の問題だと思います。

「http://localhost/cgi-bin/x.pl」を初めて実行するときは、次のようにします。

cgi_get_form(Arguments),

(Arguments = []) ->
(
format('<p>Print this as the index.</p>~n', []),
) ; true, % and it works well because there are no Arguments the first time

write('<p>'), write(Arguments), write('</p>'), nl, % and print other things

問題は2回目。今回は同じプログラムを呼び出して引数があるため、メッセージは出力されません。ここまではすべて問題ありません。その後、true を通過して続行します。そこで、前に説明した結果 ( ) を使用して (引数) を書き込もうとします_L160。結果は、フォームから渡されたデータである必要があります。

問題は何ですか?

4

1 に答える 1

0

やってみました

print_args([F|T]) :- % with Arguments
    F =.. [Name | Value], % and should continue doing things
于 2012-05-26T10:01:50.020 に答える