这是我的第一个问题,请原谅错误。
我想从Prolog中的列表生成动态HTML。 对于每个问题,我想用这个问题生成一个p-tag。
question(1, 'First Question').
question(2, 'Second Question').
get_quest( Q ) :- question( _, Q ).
index(_Request) :-
get_quest( Q ),
reply_html_page(
[
title('Dynamic HTML')
],
[
h1('Questions'),
p( Q )
]
).
我知道这不行,但我找不到合适的解决方案。
更新
这是我的代码实现。 谢谢大家的帮助
:- use_module(library(http/thread_httpd)).
:- use_module(library(http/http_dispatch)).
:- use_module(library(http/http_error)).
:- use_module(library(http/html_write)).
server(Port) :-
http_server( http_dispatch, [ port(Port) ]).
:- http_handler( root(.), index, [] ).
:- encoding( utf8 ).
get_quest( Q ) :- question( _, Q ).
index(_Request) :-
reply_html_page(
[
title('Questions')
],
[
h1('Dynamic HTML')
|\tables
]
).
tables -->
{ tables( Ls ) },
html( [ div( ul( Ls ) )]).
tables( Ls ) :-
findall( li( Q ), get_quest( Q ), Ls ).
答案 0 :(得分:1)
我只是用这个来调试一下...... 我假设您已设置所需的基础架构
...
:- use_module(library(http/html_write)).
:- http_handler(/, hello_world, []).
...
hello_world(Request) :-
debug(wn_basic_gui, '~w', hello_world(Request)),
reply_html_page([\header, \jquery, \css_binding],
[\intro
,\tables
,\footer
,\folding_compound
]).
tables --> {tables(Ls)},
html([p(ul(Ls))]).
tables(Ls) :-
findall(li(\term(S,[])), schema_wn3_table(_,S), Ls).
tables / 1创建嵌套的<li></li>
元素。
对于你的情况,应该很容易
index(_Request) :-
findall(p(Q), get_quest( Q ), Qs),
reply_html_page(
[
title('Dynamic HTML')
],
[
h1('Questions')|Qs
]
).
这是经过测试的代码......
:- module(so, [so/0]).
:- use_module(library(http/thread_httpd)).
:- use_module(library(http/http_dispatch)).
:- use_module(library(http/html_write)).
:- http_handler(/, index, []).
so :- http_server(http_dispatch, [port(1234)]).
question(1, 'First Question').
question(2, 'Second Question').
get_quest( Q ) :- question( _, Q ).
index(_Request) :-
findall(p(Q), get_quest( Q ), Qs),
reply_html_page(
[
title('Dynamic HTML')
],
[
h1('Questions')|Qs
]
).