巨人の肩の上に登る

先人の積み重ねた発見に基づいて、なにかを発見しようとすることを指す。

Prolog 入門

久しぶりのブログです.
Django + GAE で苦戦しまくてった今日この頃.
その話はまた別の機会に記録しておきたい.

今日は,Prolog (PROgramming in LOGic) に挑戦してみました.
15分ほどしか触ってないのでたいした情報はありません.
主に,下記の3点について調べてみました.

  1. 論理型プログラミング Prolog について
  2. Prolog の処理系
  3. Hello World 的なモノ

論理型プログラミング Prolog について

wikiによると,Prologは論理プログラミング(Logic Programming)であり宣言型プログラミング(Declarative programming)であると書かれています.

What is the Logic Programming

色々と調べてみたのですが,あまりいい定義や表現が見つかりませんでした. 下記の表現が,一番明確であったように思います(wiki).

多くの問題は理論として自然に表現される。解決すべき問題とは、新たな仮説が既存の理論で説明できるかどうかを問うことと等しい。論理は問題が真か偽かを証明する方法を提供する。証明構築過程は明確であり、論理は問題に答える信頼できる方法と見なされている。論理プログラミングシステムはこの過程を自動化する

Declarative programming

宣言型の定義は2つに分類できます(wiki).

  1. 処理方法ではなく対象の性質などを宣言すること(HTMLなど)
  2. 純粋関数型プログラミング、論理プログラミング、制約プログラミングの総称

宣言的プログラミングとは下記のように言えます(thinkit).

宣言型プログラミングは、命令型プログラミングとは対照的
宣言型プログラミングが記述するものは、問題の定義、すなわち解くべき問題の性質や、その際に満たすべき制約の記述

Prolog の処理系

何はともあれ,実際に書いてみるのが一番いいですよね.
処理系ですが,調べてみるとたくさんありますね.参考
SWI か GNU 当たりが良さそうです.
今回は SWI の方を使ってみます.

$ brew search prolog
gnu-prolog    swi-prolog

$ brew install swi-prolog
...待つこと数分
ERROR!!

dmg があったので,こっちからインストールしてみる./opt/local/bin に pathを通せばOK.

$ vim ~/.bash_profile

下記を追加する
alias swipl='/opt/local/bin/swipl'

$swipl
で起動するはずです.

ちなみに,終了は
?- halt.

Hello World 的なモノ

とりあえず,処理系が入ったので.ここを参考に触ってみる.

ファイル like.swi に like(taro, coffee). だけを書いて保存します。
そのファイルをダブルクリックしてください。

ダブルクリック....,GUIだと!
用はモジュールをロードすればいいはずです.調べた下記のやり方でできるみたいです.

?- ['./like.swi'].
% ./like.swi compiled 0.00 sec, 4 clauses

?- like(taro, coffee).
true

?- like(taro, tea).
false

まとめ

今回は Hello World 的なものだけやってみました.
Hello Worldなんて一文字もでてきてないけど,気にしない!