Successfully reported this slideshow.

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

3,797 views

Published on

Clojureの話の筈でした

  • Be the first to comment

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

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

×