真夜中の色彩

真夜中の雰囲気が好きなプログラマのブログ

SWI-PrologでブラウザにHello Worldしちゃうぞ!の巻

SWI-Prologにはhttpのパッケージがあるので、webアプリケーションも出来ちゃうんだぜ☆ というわけで、もきゅもきゅとやってみましょう。

httpパッケージをインストール

httpパッケージをインストールされてない?という感じだったので、インストールするのです。

[shell] $ cd [DLしてきて解凍したplのディレクトリ]/packages/http $ ./configure $ make $ [sudo] make install [/shell]

てってれー

Hello Worldしてみる

SWI-Prolog公式のHowTo Hello Worldのページに親切に書いてある。 英語はふんわりと読んで、とりあえずファイルを作る。hello.plとか。

[erl] :- use_module(library(http/thread_httpd)). :- use_module(library(http/http_dispatch)).

:- http_handler(root(hello_world), say_hi, ). % (1)

server(Port) :- % (2) http_server(http_dispatch, [port(Port)]).

say_hi(_Request) :- % (3) format('Content-type: text/plain~n~n'), format('Hello World!~n'). [/erl]

とりあえず、swiplに食わせる。もぐもぐ。 [shell] $ swipl -f hello.pl [/shell] Errorが出てないか注意。

んでもって、空けておいたポートを指定してあげる。 [shell] 1 ?- server(5000). [/shell]

そして、以下にアクセス。 http://midnightblue.jp:5000/hello_world

ちゃんとHello Worldが出ました≧∇≦

ふんわりとした解説みたいなもの

[erl] :- use_module(library(http/thread_httpd)). :- use_module(library(http/http_dispatch)). [/erl] おまじない、みたいな。

[erl] :- http_handler(root(hello_world), say_hi, ). % (1) [/erl] /hello_world がリクエストされたらsay_hiを呼ぶよ!みたいな。

[erl] server(Port) :- % (2) http_server(http_dispatch, [port(Port)]). [/erl] httpdを指定されたPortで起こすよ!みたいな。

[erl] say_hi(_Request) :- % (3) format('Content-type: text/plain~n~n'), format('Hello World!~n'). [/erl] say_hiの実装、みたいな。 とりあえずリクエストが着たらテキストでHello World!と書き書き、みたいな。

こんなふんわりとした解説よりもHowToページの英語のほうが真面目に書いてありますが、感覚としてなんとなくつかめればいいかな的な。

無事におわってよかったよかった。 ちなみに、実行したswiplをhalt.しちゃうとサーバも終わるよ。

まとめ

SWI-PrologのhttpdでWebアプリなHello Worldができました('∇')わふわふ