Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Prolog

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

 Prolog

Avatar for Daiki Matsunaga

Daiki Matsunaga

December 10, 2017
Tweet

More Decks by Daiki Matsunaga

Other Decks in Programming

Transcript

  1. 3 サザ◦さん %事実 親子(ふね,サザエ). 親子(ふね,カツオ). 親子(ふね,ワカメ). 親子(サザエ,タラオ). %規則 兄弟(X,Y) :­

    親子(Z,X), 親子(Z,Y), X\==Y. %­­­ここまでをファイルに記述し、Prolog処理系にロードする %質問 ?­ 親子(ふね,X). X = サザエ ; X = カツオ ; X = ワカメ ?­ 兄弟(カツオ,ワカメ). yes. ?­ 兄弟(タラオ,ワカメ). no.
  2. 4 地図を塗り分ける different(red,green). different(red,blue). different(green,red). different(green,blue). different(blue,red). different(blue,green). coloring(Hyogo,Kyoto,Shiga,Nara,Osaka,Wakayama) :­

    different(Hyogo,Kyoto), …… , different(Osaka,Wakayama). ?­ coloring(Hyogo,Kyoto,Shiga,Nara,Osaka,Wakayama). Hyogo = red  Kyoto = green Shiga = red  Nara = red Osaka = blue  Wakayama = green ; Hyogo = red Kyoto = green Shiga = blue Nara = red Osaka = blue Wakayama = green (...以下省略)
  3. 5 append %リストを連結 append([], Xs, Xs). append([X | Ls], Ys,

    [X | Zs]) :­ append(Ls, Ys, Zs). %質問 ?­ append([1,2],[3,4,5],X). X = [1,2,3,4,5] yes. ?­ append([1,2],X,[1,2,3,4,5]). X = [3,4,5] yes. ?­ append(X,Y,[a,b,c]). X = NIL Y = [a,b,c] ; X = [a] Y = [b,c] ; X = [a,b] Y = [c] ; X = [a,b,c] Y = NIL
  4. 6 Prologの動作 • 合致する節がなければ失敗 • 合致する節があり、その副目標もすべて成功すれ ば、成功 • 節の意味 –

    A :- B, C, D. • 「B かつ C かつ D が真なら A は真」(命題として見る) • 「サブルーチンAは文B, C, Dを逐次実行」(手続き的な見方) • Prologの実行は深さ優先探索と見ることもできる
  5. 7 単一化(ユニフィケーション) • Prologの変数 – Prologの変数ははじめ未束縛(アンバウンド) – 一度代入されると値は変えられない • 『合致する』というのは項同士の単一化(ユニフィケーショ

    ン)で調べる – 単一化は2つの項を等しくしようとする操作 – 未束縛変数と値の単一化は、変数への代入 – 未束縛変数同士の単一化は、2つの変数を同一視 – 親子(ふね, サザエ) と 親子(ふね, X)を単一化 • Xにサザエが代入される(Xは未束縛だとする) – 親子(ふね, サザエ) と 親子(波平, サザエ)の単一化 • 失敗する • 双方向性 – appendの例では、3つの引数うちどれを変数にしてもうごいた
  6. 9 Warren's Abstract Machine (WAM) • Prologプログラムを効率よく動かすために考えられたアーキテクチャ switch­on­term L2,L1,L5,FAIL L1:

    switch­on­constant {[] L3} → L2: try­me­else L5 L3: get­constant [],A1 get­value X2,A3 proceed L4: trust­me L5: get­list A1 unify­variable X4 unify­variable X1 get­list A3 unify­value X4 unify­variable X3 execute append/3 %append( % [], % Xs, Xs %). %append( % [ % X | % Ls], Ys, % [ % X | % Zs]) :­ %append(Ls, Ys, Zs). append/3をWAMの命令列にコンパイルした結果
  7. 10 参考文献 • Prolog(Wikipedia) – https://ja.wikipedia.org/wiki/Prolog • Prologを使ってみる – http://www.takeoka.org/~take/ailabo/prolog/prolog-prol

    ogue.html • 7つの言語 7つの世界(Bruce.A.Tate, オーム社) • wambook – http://wambook.sourceforge.net/ • AN ABSTRACT PROLOG INSTRUCTION SET(和訳) – http://www.takeoka.org/~take/ailabo/prolog/wam/wam.h tml