SWI-PrologでWebアプリケーション

PrologでWebアプリケーションってどんな感じなんだろう、と思って試してみました。何でも出来そうなProlog処理系と言えば真っ先に思い付くのがSWI-Prologです。検索してみるとあっさりと目的のページがみつかりました。

http://www.swi-prolog.org/packages/http.htm

ここの載っているサンプルにほんのちょっとだけ手を加えて次のようなものを書いてみました。

:- use_module(library('http/thread_httpd')).
:- use_module(library('http/http_dispatch')).
:- use_module(library('http/html_write')).

server(Port) :-
  http_server(http_dispatch, [port(Port)]).
  
:- http_handler('/', root, []).
:- http_handler('/hello/world', hello_world, []).
:- http_handler('/hello/japanese', hello_japanese, []).
  
root(_Request) :-
  reply_html_page([ title('Demo server') ],
                  [ ul([ li(a(href('hello/world'), hello)),
                         li(a(href('hello/japanese'), 'こんにちは日本語')) ]) ]).

hello_world(_Request) :-
  reply_html_page([ title('Hello World') ],
                  [ h1('Hello World'),
                    p('This is my first page') ]).

hello_japanese(_Request) :-
  reply_html_page([ title('こんにちは日本語') ],
                  [ h1('こんにちは日本語'),
                    p('これは二番目のページ') ]).

:- server(5000).

これを test.pl という名前で保存。次に実行してみます。

pl -f test.pl

というわけで、http://localhost:5000 にアクセスして、無事にページが表示されました。おお、もの凄く簡単!こんなに簡単だったとは思いませんでした。さすがはSWI-Prolog

ところで Ubuntu 7.10 の人はSWI-Prologのバージョンが古いので http://www.swi-prolog.org/packages/http.htm に載っているサンプルもこのtest.plも動きません。何らかの方法で最新の安定板にアップデートした方が良いと思います。