Prologプログラムの意味


5.1 プログラムの意味

構文に続いて、プログラムの意味を考えてみましょう。例として
          P :- Q , R.
という節を考えます。この節は と読むことができます。勿論、この解釈は正しいです。しかし、もう少し{\gt プログラムの実行時}のことを考えてみると、 と解釈した方が正確です。これらのことから、最初の解釈を宣言的意味、後のを手続き的意味と言います。とは言うものの、Prologのプログラムを考える場合、現時点ではどちらでも自分の考えやすい方でいいでしょう。ただ、宣言的意味で述べたように考えるにしても、プログラムの実行順序は考えておくようにしましょう。

本体の目標の間のカンマはandでした。それでは、orにしたいときは、どうしたらいいのでしょうか。それにはセミコロンを使います。
          P :- Q ; R.
このように書くと、QまたはRが真ならば、Pは真である、となります。ということは、これは、
          P :- Q.
          P :- R.
と同じことになります。 また、カンマはセミコロンより優先順位が高いので、
          P :- Q,R ; S,T,U.
は、
          P :- (Q,R) ; (S,T,U).
と解釈され、
          P :- Q,R.
          P :- S,T,U.
と同じになります。



《演習問題》

5.2 意味を踏まえて動作を考える

では、ここで簡単な簡単な極めて簡単な知識ベースシステムを考えてみましょう。知識ベースというのは知識データに関するデータベースのことです。C言語で「猿バナナ」をやったときに「知識」を扱うということを考えましたね。「猿バナナ」のときの「知識」とは、「a地点に猿がいる」、「b地点にバナナがぶら下がっている」、「c地点に箱がある」などでした。

さて、次のプログラムを考えます。(次頁脚注参照のこと)
          tall(yuusuke).          % 幽助は背が高い
          small(genkai).          % 幻海師範は背が低い
          small(koenma).          % コエンマは背が低い
          tall(kurama).           % 鞍馬は背が高い
          small(hiei).            % 飛影は背が低い

          ningen(genkai).         % 幻海は人間界の住人
          reikai(koenma).         % コエンマは霊界の住人
          makai(kurama).          % 鞍馬は魔界の住人
          makai(hiei).            % 飛影は魔界

          not_human(Z):-reikai(Z). % 霊界の住人は人間ではない
          not_human(Z):-makai(Z).  % 魔界の住人は人間ではない
富樫義博作マンガ「遊幽白書」の登場人物。
浦飯幽助:主人公。霊界探偵。
幻海師範:初老の女性武闘家。ゲームも強いらしい。幽助の師匠。
コエンマ:閻魔大王の息子。霊界バージョンだと2.5等身位で背が低い。幽助を霊界探偵にスカウトした。
鞍馬:もともとは魔界の盗賊頭。いまは人間南野幸一(だと思ったんだがなー。「南野」は確かだ。)と合体している。ここでは、一応「魔界の住人」ということで...
飛影:魔界でも他の世界とは隔絶された氷女を母に持つ。自分を捨てた母とその氷女の世界に対する復讐の念で生きてきたが...。
「遊幽」を知らない人にはごめんなさいね。この”霊界”、”魔界”ってシチュエーションが例題にぴったりだったもんで。
このプログラムをPrologインタプリタに読み込んでおいて、次のように質問します。
          ?- not_human(X),tall(X).
これは、「人間ではなくて、背が高いのは誰ですか」ということです。

さて、この質問に対してPrologはどのように振る舞うでしょうか。



《演習問題》
目次に戻る目次に戻る