prologの話をしよう - cross2012・言語cross
DESCRIPTION
Clojureの話の筈でしたTRANSCRIPT
![Page 1: Prologの話をしよう - CROSS2012・言語CROSS](https://reader031.vdocuments.site/reader031/viewer/2022020207/55660526d8b42aa6628b4c00/html5/thumbnails/1.jpg)
Prologの話をしよう
esehara shigeo
![Page 2: Prologの話をしよう - CROSS2012・言語CROSS](https://reader031.vdocuments.site/reader031/viewer/2022020207/55660526d8b42aa6628b4c00/html5/thumbnails/2.jpg)
お前の担当は
Clojureじゃないのかよ
![Page 3: Prologの話をしよう - CROSS2012・言語CROSS](https://reader031.vdocuments.site/reader031/viewer/2022020207/55660526d8b42aa6628b4c00/html5/thumbnails/3.jpg)
あわてるな、まず話を聞け
![Page 4: Prologの話をしよう - CROSS2012・言語CROSS](https://reader031.vdocuments.site/reader031/viewer/2022020207/55660526d8b42aa6628b4c00/html5/thumbnails/4.jpg)
壇上の皆さん
● いわゆる「関数型言語」と総称される皆さん○ F#, Haskell
● いわゆる「オブジェクト指向言語」と総称される皆さん○ Smalltalk, Delphi
![Page 5: Prologの話をしよう - CROSS2012・言語CROSS](https://reader031.vdocuments.site/reader031/viewer/2022020207/55660526d8b42aa6628b4c00/html5/thumbnails/5.jpg)
忘れられた、
プログラミング言語パラタイム
![Page 6: Prologの話をしよう - CROSS2012・言語CROSS](https://reader031.vdocuments.site/reader031/viewer/2022020207/55660526d8b42aa6628b4c00/html5/thumbnails/6.jpg)
論理型
プログラミング
![Page 7: Prologの話をしよう - CROSS2012・言語CROSS](https://reader031.vdocuments.site/reader031/viewer/2022020207/55660526d8b42aa6628b4c00/html5/thumbnails/7.jpg)
論理型
プログラミング といえば……
![Page 8: Prologの話をしよう - CROSS2012・言語CROSS](https://reader031.vdocuments.site/reader031/viewer/2022020207/55660526d8b42aa6628b4c00/html5/thumbnails/8.jpg)
Prolog
![Page 9: Prologの話をしよう - CROSS2012・言語CROSS](https://reader031.vdocuments.site/reader031/viewer/2022020207/55660526d8b42aa6628b4c00/html5/thumbnails/9.jpg)
Prologとは
● ある要素と要素の関係を記述するためのプログラミング言語○ 例: win(goo, choki).
● それらの関係から何が導き出せるかを判別し、その値を返すことが出来る○ 例: ?- win(MYHAND, choki).
■ MYHAND = goo
![Page 10: Prologの話をしよう - CROSS2012・言語CROSS](https://reader031.vdocuments.site/reader031/viewer/2022020207/55660526d8b42aa6628b4c00/html5/thumbnails/10.jpg)
じゃんけんとは
● ある要素(この場合は手)に対して、何の手に勝利しているかの関係性によって勝敗が決定するゲームである○ グー→チョキ○ チョキ→パー○ パー→グー
![Page 11: Prologの話をしよう - CROSS2012・言語CROSS](https://reader031.vdocuments.site/reader031/viewer/2022020207/55660526d8b42aa6628b4c00/html5/thumbnails/11.jpg)
Prologで雑に書くとこんな感じ
win(goo, choki).win(choki, par).win(par, goo).
![Page 12: Prologの話をしよう - CROSS2012・言語CROSS](https://reader031.vdocuments.site/reader031/viewer/2022020207/55660526d8b42aa6628b4c00/html5/thumbnails/12.jpg)
じゃんけんのゲームで勝敗を決定するということは、じゃんけんの勝利関係の「事実」を宣言すればいいだけの筈だ
![Page 13: Prologの話をしよう - CROSS2012・言語CROSS](https://reader031.vdocuments.site/reader031/viewer/2022020207/55660526d8b42aa6628b4c00/html5/thumbnails/13.jpg)
「勝つ」とは
● ある要素(この場合は手)の関係が成り立つ場合において、何の要素と結びついているかということである○ プレイヤーの手とCPUの手という組み合わせがルール
に書いてあるなら、プレイヤーの勝ち
○ CPUの手とプレイヤーの手という組み合わせがルール
に書いてあるなら、CPUの勝ち○ どっちもないなら引き分け
![Page 14: Prologの話をしよう - CROSS2012・言語CROSS](https://reader031.vdocuments.site/reader031/viewer/2022020207/55660526d8b42aa6628b4c00/html5/thumbnails/14.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020207/55660526d8b42aa6628b4c00/html5/thumbnails/15.jpg)
ある関係性を「解くためのロジック」を排除出来るならば、そのルール自体については、「推論」で事足りる
![Page 16: Prologの話をしよう - CROSS2012・言語CROSS](https://reader031.vdocuments.site/reader031/viewer/2022020207/55660526d8b42aa6628b4c00/html5/thumbnails/16.jpg)
Clojureで論理型プログラミングが出来るか?
![Page 17: Prologの話をしよう - CROSS2012・言語CROSS](https://reader031.vdocuments.site/reader031/viewer/2022020207/55660526d8b42aa6628b4c00/html5/thumbnails/17.jpg)
core.logic
![Page 18: Prologの話をしよう - CROSS2012・言語CROSS](https://reader031.vdocuments.site/reader031/viewer/2022020207/55660526d8b42aa6628b4c00/html5/thumbnails/18.jpg)
元ネタ・いわゆる『手習いScheme』などの一連のシリーズの一つ
![Page 19: Prologの話をしよう - CROSS2012・言語CROSS](https://reader031.vdocuments.site/reader031/viewer/2022020207/55660526d8b42aa6628b4c00/html5/thumbnails/19.jpg)
じゃんけんプログラミングの
デモンストレーションと
ソースリーディング
![Page 20: Prologの話をしよう - CROSS2012・言語CROSS](https://reader031.vdocuments.site/reader031/viewer/2022020207/55660526d8b42aa6628b4c00/html5/thumbnails/20.jpg)
まとめ
![Page 21: Prologの話をしよう - CROSS2012・言語CROSS](https://reader031.vdocuments.site/reader031/viewer/2022020207/55660526d8b42aa6628b4c00/html5/thumbnails/21.jpg)
JavaScriptは、突然復活し、時代の寵児になった。
関数型というパラタイムも、現在復活しつつある。
LispはJVMの力を借りて、Clojureとして復活しつつある。
![Page 22: Prologの話をしよう - CROSS2012・言語CROSS](https://reader031.vdocuments.site/reader031/viewer/2022020207/55660526d8b42aa6628b4c00/html5/thumbnails/22.jpg)
論理型プログラミングは
可能性があるが、その可能性はまだ見えない。
![Page 23: Prologの話をしよう - CROSS2012・言語CROSS](https://reader031.vdocuments.site/reader031/viewer/2022020207/55660526d8b42aa6628b4c00/html5/thumbnails/23.jpg)
でもパラタイムがまったく違う言語を使うと、別の視点が啓かれるのでとてもいい。
![Page 24: Prologの話をしよう - CROSS2012・言語CROSS](https://reader031.vdocuments.site/reader031/viewer/2022020207/55660526d8b42aa6628b4c00/html5/thumbnails/24.jpg)
LispもいいけどPrologもね☆