Prolog的动态HTML

时间:2014-07-05 13:35:37

标签: html prolog swi-prolog

这是我的第一个问题,请原谅错误。

我想从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 ).

1 个答案:

答案 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
    ]
    ).