SWI-Prolog cgi_get_form(Arguments)保存和处理参数Web表单

时间:2012-05-03 09:26:54

标签: forms prolog swi-prolog

我正在寻找一种保存方式,并在我提交表单后处理SWI-Prolog中的Web表单的参数后,我调用相同的程序来生成另一个表单,依此类推。始终从一种形式到下一种形式调用相同的prolog程序 CGI SWI-Prolog库将这些参数保存为名称(值)术语列表,即[Name(Value)]


如果我在表单中传递像隐藏参数这样的参数(TotalArguments是一个列表):

  

format('“<”input type =“hidden”id =“nameofform1”name =“nameofform1”value =“~w”/> ~n',TotalArguments),

当我追加它时,我需要删除在TotalArguments上的结果列表中连接的id或名称。知道如何做到这一点,以便最终列表看起来像[nameofform1(value1), nameofform2(value2),...]


我也可以编写这个参数列表并将其附加到一个文件中,并在每次再次调用该程序时查阅它,但这将始终加载它们,我只需要加载特定步骤和表单中所需的参数此刻处理。因为否则此文件在某些​​执行后可能包含不需要的信息。关于如何这样做的任何想法?
针对这类问题还有其他建议吗?


使用隐藏表格使用我的解决方案进行编辑
我通过创建:

解决了这个问题
  extract_value([],_).
  extract_value([A0|__ ], Valor) :-
     A0 =.. [_, Value],
     Valor is Value.

然后做:

  

extract_value(Arguments,Value),

并提交表单的隐藏值,如:

  

format('<“input type =”hidden“id =”nameofform1“name =”nameofform1“value =”~w“/> ~n',[Value]),

并将其附加到下一个表单中,以便它看起来像我想要的那样:

  

[nameofform2(值2),nameofform1(值1)]

1 个答案:

答案 0 :(得分:2)

我有点不清楚你在这里究竟需要什么,但要删除与给定元素统一的列表的第一个元素(特别是如果您确定该列表包含这样的元素),请使用selectkchk / 3 。例如:

selectchk(id(_), List0, List1),
selectchk(name(_), List1, List)

以获取List,其中List0没有元素id(_)name(_)。正如我所理解的那样,在您的问题中隐含的类似似乎是如何根据术语name(form1)和Value创建类似“form1(Value)”的术语。例如,您可以使用= .. / 2来执行此操作。您可以使用仿函数N创建一个术语T,并使用

创建参数Args
T =.. [N|Args]

似乎没有必要在这里写任何文件,我只是简单地通过表格传递信息。