prologの話をしよう - cross2012・言語cross

24
Prologの話をしよう esehara shigeo

Upload: esehara-shigeo

Post on 28-May-2015

2.586 views

Category:

Documents


10 download

DESCRIPTION

Clojureの話の筈でした

TRANSCRIPT

Page 1: Prologの話をしよう - CROSS2012・言語CROSS

Prologの話をしよう

esehara shigeo

Page 2: Prologの話をしよう - CROSS2012・言語CROSS

お前の担当は

Clojureじゃないのかよ

Page 3: Prologの話をしよう - CROSS2012・言語CROSS

あわてるな、まず話を聞け

Page 4: Prologの話をしよう - CROSS2012・言語CROSS

壇上の皆さん

● いわゆる「関数型言語」と総称される皆さん○ F#, Haskell

● いわゆる「オブジェクト指向言語」と総称される皆さん○ Smalltalk, Delphi

Page 5: Prologの話をしよう - CROSS2012・言語CROSS

忘れられた、

プログラミング言語パラタイム

Page 6: Prologの話をしよう - CROSS2012・言語CROSS

論理型

プログラミング

Page 7: Prologの話をしよう - CROSS2012・言語CROSS

論理型

プログラミング といえば……

Page 8: Prologの話をしよう - CROSS2012・言語CROSS

Prolog

Page 9: Prologの話をしよう - CROSS2012・言語CROSS

Prologとは

● ある要素と要素の関係を記述するためのプログラミング言語○ 例: win(goo, choki).

● それらの関係から何が導き出せるかを判別し、その値を返すことが出来る○ 例: ?- win(MYHAND, choki).

■ MYHAND = goo

Page 10: Prologの話をしよう - CROSS2012・言語CROSS

じゃんけんとは

● ある要素(この場合は手)に対して、何の手に勝利しているかの関係性によって勝敗が決定するゲームである○ グー→チョキ○ チョキ→パー○ パー→グー

Page 11: Prologの話をしよう - CROSS2012・言語CROSS

Prologで雑に書くとこんな感じ

win(goo, choki).win(choki, par).win(par, goo).

Page 12: Prologの話をしよう - CROSS2012・言語CROSS

じゃんけんのゲームで勝敗を決定するということは、じゃんけんの勝利関係の「事実」を宣言すればいいだけの筈だ

Page 13: Prologの話をしよう - CROSS2012・言語CROSS

「勝つ」とは

● ある要素(この場合は手)の関係が成り立つ場合において、何の要素と結びついているかということである○ プレイヤーの手とCPUの手という組み合わせがルール

に書いてあるなら、プレイヤーの勝ち

○ CPUの手とプレイヤーの手という組み合わせがルール

に書いてあるなら、CPUの勝ち○ どっちもないなら引き分け

Page 14: Prologの話をしよう - CROSS2012・言語CROSS

Prologで雑に書くとこんな感じ

judge("プレイヤー1の勝利", P1, P2) :- win(P1, P2).judge("プレイヤー2の勝利", P1, P2) :- win(P2, P1).judge("引き分け", _, _).

?- judge(X, goo, par).X = “プレイヤー2の勝利”?- judge(X, goo, goo).X= “引き分け”

Page 15: Prologの話をしよう - CROSS2012・言語CROSS

ある関係性を「解くためのロジック」を排除出来るならば、そのルール自体については、「推論」で事足りる

Page 16: Prologの話をしよう - CROSS2012・言語CROSS

Clojureで論理型プログラミングが出来るか?

Page 17: Prologの話をしよう - CROSS2012・言語CROSS

core.logic

Page 18: Prologの話をしよう - CROSS2012・言語CROSS

元ネタ・いわゆる『手習いScheme』などの一連のシリーズの一つ

Page 19: Prologの話をしよう - CROSS2012・言語CROSS

じゃんけんプログラミングの

デモンストレーションと

ソースリーディング

Page 20: Prologの話をしよう - CROSS2012・言語CROSS

まとめ

Page 21: Prologの話をしよう - CROSS2012・言語CROSS

JavaScriptは、突然復活し、時代の寵児になった。

関数型というパラタイムも、現在復活しつつある。

LispはJVMの力を借りて、Clojureとして復活しつつある。

Page 22: Prologの話をしよう - CROSS2012・言語CROSS

論理型プログラミングは

可能性があるが、その可能性はまだ見えない。

Page 23: Prologの話をしよう - CROSS2012・言語CROSS

でもパラタイムがまったく違う言語を使うと、別の視点が啓かれるのでとてもいい。

Page 24: Prologの話をしよう - CROSS2012・言語CROSS

LispもいいけどPrologもね☆