0

我在使用 SWI-Prolog 的 CGI 库传递输入 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)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

问题是第二次。这次调用同一个程序有参数所以它不打印消息,到这里一切都很好。然后通过 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 回答