このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1325685876/194
#  [1] 授業単元:C言語入門  
#  [2] 問題文: http://ime.nu/codepad.org/hsA7qgRQ  
#    
#  課題1
#  
#  ロボットへコマンド(数字)を送ることを考える.コマンドは,送信した数字が2の倍数か,3の倍数か,5の倍数かによって次の動作をするものとロボットに解釈させる.
#  2の倍数の時: Up (腕を上げる)
#  3の倍数の時: Go (前進する)
#  5の倍数の時: !! (電撃する)
#  マイナスの数: Error(エラー)
#  それ以外の時: No (何もしない)入力されたコマンドによっては,例えば15のように3の倍数でもあり,5の倍数でもあるような数がある.その場合には両方の動作を同時に実行するものとする.このようなコマンド解釈プログラムを作成せよ.
#  このプログラムでは,送信される数字は前回同様にキーボードから読み込む.ただし整数(int)として入力するものとする.
#  そしてコマンドの内容次第で,ロボットの動作をUp, Go, !!として画面に表示すること.同時に実行する場合には,必ずUp,Go,!!の順番に表示するものとする.
#  
#  実行例
#  実行開始
#  15              ←コマンドとしてキーボードから15を入力
#  Go!!	        ←ロボットの動作として結果を表示.(前進と電撃を同時に実行)
#  
#  
#  ヒントとして,出力としては次のようなものが考えられる.
#  Up
#  UpGo
#  UpGo!!
#  Go
#  Go!!
#  !!
#  Error
#  No
#  

'ロボットへコマンド(数字)を送る'(_ロボット) :-
        write('コマンド(整数)を入力してください\n'),
        コマンドを得る(_コマンド),
        ロボットへコマンドを送る(_ロボット,_コマンド).

コマンドを得る(_コマンド) :-
        get_line(Line),
        コマンド診断(Line,_コマンド).
コマンドを得る(_コマンド) :-
        コマンドを得る(_コマンド).

コマンド診断(Line,_コマンド) :-
        atom_to_term(Line,_コマンド),
        integer(_コマンド),!.

ロボットへコマンドを送る(_ロボット,0) :- !.
ロボットへコマンドを送る(_ロボット,_コマンド) :-
        _ロボット :: ロボット(_コマンド),
        fail.

%%%%%% ロボット (サーバー) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

ロボット(_コマンド) :-
        コマンドを解釈して実行する(_コマンド),
        fail.
ロボット(_).

コマンドを解釈して実行する(_コマンド) :-
        '2の倍数の時: Up (腕を上げる)'(_コマンド).        
コマンドを解釈して実行する(_コマンド) :-
        '3の倍数の時: Go (前進する)'(_コマンド).        
コマンドを解釈して実行する(_コマンド) :-
        '5の倍数の時: !! (電撃する)'(_コマンド).        
コマンドを解釈して実行する(_コマンド) :-
        'マイナスの数: Error(エラー)'(_コマンド).        
コマンドを解釈して実行する(_コマンド) :-
        'それ以外の時: No (何もしない)'(_コマンド).        

'2の倍数の時: Up (腕を上げる)'(N) :-
        '2の倍数の時'(N),
        腕を上げる.

'3の倍数の時: Go (前進する)'(N) :-
        '3の倍数の時'(N),
        前進する.

'5の倍数の時: !! (電撃する)'(N) :-
        '5の倍数の時'(N),
        電撃する.

'マイナスの数: Error(エラー)'(N) :-
        'マイナスの数'(N),
        エラー.

'それ以外の時: No (何もしない)'(_).

'2の倍数の時'(N) :-
        0 is N mod 2.

'3の倍数の時'(N) :-
        0 is N mod 3.

'5の倍数の時'(N) :-
        0 is N mod 5.

'マイナスの数'(N) :-
        N < 0.

腕を上げる :-
        write('Up').

前進する :-
        write('Go').

電撃する :-
        write('!!').

エラー :-
        write('Error').