このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1272006124/168
#  <問題> 
#  以下のようにスポーツができるか否かを判断するプログラムを考える。 
#  1. 天気が晴れの場合は, テニスコードが空いているならテニスができる。 
#  2. 天気が晴れでない場合は, 卓球室があいているなら卓球ができる。 
#  3. 上記以外の場合はなにもしない。 
#  ここで天気状況などの事実を次のように定義する。 
#  weather(clear). % 天気が晴れ(これを削除すれば「天気が晴れでない」となる) 
#  empty(tennis-court). % テニスコードが空き 
#  ...... 
#  また、スポーツができるか否かを上記事実に基つく推論する規則play-sport() は次のように定義 
#  する。 
#  play-sport :- weather(clear), !, empty(tennis-court), write('tennis'). 
#  play-sport :- empty(table-tennis-court), write('table tennis'). 
#  これらの規則により 
#   weather(clear)(天気が晴れ)とempty(tennis-court)(テニスコードが空き)がともに真の 
#  場合は, 1番目の規則が成立する。 
#   weather(clear) が真でもempty(tennis-court) が偽の場合、1番目の規則は成立しない。しか 
#  も既に「!」を通過したため、2 番目の推論規則がカットされ、全ての規則が成立しないこ 
#  とになる。 
#   weather(clear) が偽の場合は,「!」を通過せずに1番目の規則が成立しなくなるため、2 番 
#  目の規則が適用さる。これでempty(table-tennis-court) の真偽により2番目の規則が成立す 
#  るか否かが決まる。 
# 
# 

:- op(750,xfx,が).

どんなスポーツをするか(テニス) :- テニスをする,!.
どんなスポーツをするか(卓球) :- 卓球をする,!.
どんなスポーツをするか(なにもしない) :- なにもしない.

テニスをする :- テニスができる.

卓球をする :- \+(天気 が 晴れ),卓球ができる.

なにもしない :- \+(テニスをする),\+(卓球をする).

テニスができる :-
        '天気が晴れの場合は, テニスコートが空いているならテニスができる。'.

'天気が晴れの場合は, テニスコートが空いているならテニスができる。' :-
        天気 が 晴れ,
        テニスコート が 空いている.

卓球ができる :- 卓球室 が あいている.

% 例えば以下のように状況に関する定義を書く。

天気 が 晴れ.

テニスコート が 空いている.

卓球室 が あいている.