gpt4 book ai didi

Prolog HTTP 动态添加指向 html 的链接

转载 作者:行者123 更新时间:2023-12-01 07:45:18 25 4
gpt4 key购买 nike

我是序言和声明式编程的新手,我很难实现以下目标。

我关注 this tutorial现在想在一个页面上显示一些链接。要显示哪些链接取决于某些事实/变量。

这是我当前的代码:

link_collection(Request) :-
http_parameters(Request,
[
foo(Foo, [optional(true)])
]),
reply_html_page(
[title('Dynamic Link Collection')],
[
a([href='/questionalice'], 'Question Alice'), /* Should only show if has(investigate, body) is true */
a([href='/questionbob'], 'Question Bob'), /* Should only show if Foo = bar */
a([href='/investigatebody'], 'Investigate Body') /* Show always */
]
).

请注意,“排列”的数量不允许我只是“或” link_collection陈述。我也希望条件任意复杂。

最佳答案

您的问题可以在相当笼统的背景下得到回答,也就是说,即使不考虑 HTTP 的具体用例。

一般问题似乎是:如何动态选择一些可用选项的子集。

为此,假设您不仅将每个链接表示为“自身”,还表示为 。对 形式为 Link-Condition , 解释为 Link仅当 Condition 时才应包括在内是 真实 .

让我们首先考虑 条件 我们想要表达并定义它们何时为真。重要的是,您的条件还取决于 Foo 的值。 ,因此必须考虑到这一点:

is_true_with_foo(_, has(investigate, body)) :- has(investigate, body)。
is_true_with_foo(Foo, Foo = bar) :- Foo = bar。
is_true_with_foo(_, true)。

因此,这描述了特定条件何时为真,也取决于 Foo 的值。 .

现在,您的示例条件可以表示如下:

链接条件(Foo,
[
a([href='/questionalice'], '问题 Alice')-has(investigate, body),
a([href='/questionbob'], '问题 Bob')-(Foo = bar),
a([href='/investigatebody'], '调查主体')-true
])。

要描述列表的子序列,请考虑使用 DCG ()。

例如:

链接子集([],_)-> []。
links_subset([L-Cond|Ls], Foo) -->
( { is_true_with_foo(Foo, Cond) } ->
[大]
; []
),
链接子集(Ls,Foo)。

您现在可以调用:

?- links_conditions(Foo, LCs0),
短语(links_subset(LCs0,否),LCs)。

并在 LCs 中获取其余链接。在这种情况下:

LCs = [a([href='/questionalice'], '问题 Alice'), a([href='/investigatebody'], 'Investigate Body')]。

因此,我们可以在回复中使用生成的链接:

链接集合(请求):-
http_parameters(请求, [foo(Foo, [optional(true)])]),
链接条件(Foo,LCs0),
短语(links_subset(LCs0,Foo),LCs),
reply_html_page([title('Dynamic Link Collection')], LCs)。

注意 Foo在这些谓词中传递。

P.S.:您的示例片段有基本的语法错误,所以我怀疑您的代码以任何方式工作。

关于Prolog HTTP 动态添加指向 html 的链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47106995/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com