1

我正在寻找一种保存方法,并在提交表单时在 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(参数,值),

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

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

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

[nameofform2(value2),nameofform1(value1)]

4

1 回答 1

2

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

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

为了获得List,即没有元素id(_)和的List0 name(_)。据我了解,您的问题中隐含的一种似乎是如何在给定术语名称(form1)和值的情况下创建像“form1(值)”这样的术语。例如,您可以使用 =../2 来执行此操作。您可以使用仿函数 N 和参数 Args 创建一个术语 T

T =.. [N|Args]

似乎没有必要在此处向文件写入任何内容,我只是按照您的概述将信息通过表单传递。

于 2012-05-03T11:27:43.373 回答