このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1337692704/188
#  【課題】以下のようなクラス(名前は各自決める)を定義せよ。 
#  mainメソッドを呼び出すと、別のスレッドthを生成し、スタートさせる。 
#  mainメソッドは、プロンプトとして”Command> “を印字し、キーボードからの入力を待つ。 
#  入力は、以下のようなadd, removeなどを先頭とするいくつかの文字列で、 
#  それを何らかの方法でスレッドthに渡し、ふたたび “Command> “を印字して次の入力を待つ。 
#  Command> add <文字列> 
#  スレッドthでは、mainから受け取った<文字列>の部分を取り出し、 
#  thの中で管理するLinkedListの要素に加える(add)。一方、 
#  Command> remove <文字列> とすると該当する文字列をLinkedListから消す。そのほか、 
#  Command> print          とでき、printはLinkedListにある要素をすべて印字し 
#  Command> exit           exitはスレッドを停止し、それを待ってmainメソッドを終了する 
#  ものである。 
#  上記以外の入力は無視する。 
#  (ヒント:書き方はたくさんありますが、たとえば前回のProducer Consumerの例を考えてください。 
#  片方が生成(入力された文字列をMqueueに格納)、他方がそれを読み出すと考えます。 
#  もちろんもっと簡単な方法もあると思います。上記の仕様通りに動いていれば正解です。 
#  【 形態 】1. Javaアプリケーション(main()で開始) 
#  【GUI】4.制限なし 
#  【 期限 】 今日(7/14)中 
#  【 Ver  】 1.7.0_03 
#  【 補足 】宜しくお願いします! 
# 
# 

影を用いて情報を管理する :-
        取り次ぎ(_取り次ぎ),
        コマンドを得る(_コマンド行),
        影を生み出す(影(_取り次ぎ),_影,[]),
        影を用いて情報を管理する(_取り次ぎ,_命令).

影を用いて情報を管理する(_取り次ぎ,exit).
影を用いて情報を管理する(_取り次ぎ,コマンド行) :-        
        コマンドを得る(_コマンド_2),
        thread_send_message(_取り次ぎ,コマンド_2),
        影を用いて情報を管理する(_取り次ぎ,コマンド行_2).

コマンドを得る(_コマンド行) :-
        write('コマンド>> '),
        get_line(_コマンド行).

影(_取り次ぎ) :-
        言伝からコマンドを得る(_取り次ぎ,_命令,R),
        影(_取り次ぎ,_命令,R,[],L).

影(_取り次ぎ,_命令,_付加情報,L_1,L) :-
        コマンドの実行(_取り次ぎ,_コマンド,L_1,L_2),
        言伝を送る(_取り次ぎ,ok),
        言伝からコマンドを得る(_取り次ぎ,_命令_2,_付加情報_2),
        影(_取り次ぎ,_命令_2,_付加情報_2,L_2,L).

言伝からコマンドを得る(_取り次ぎ,_命令,R) :-
        言伝を取り出す(_取り次ぎ,_言伝,[]),
        split(_言伝,[' '],[_命令|R]).

コマンドの実行(add,[_情報],L_1,[_情報|L_1]).
コマンドの実行(delete,[_情報],L_1,L_2) :-
        ならびから削除(_情報,L_1,L_2).
コマンドの実行(print,[],L_1,L_1) :-
        writef('%t\n',[L_1]).
コマンドの実行(_コマンド,_,L_1,L_1) :-
        writef('%tコマンドは存在しません。\n',[_コマンド]).

ならびから削除(_,[],[]) :- !.
ならびから削除(_削除する要素,[_削除する要素|_残り対象ならび],_削除されたならび) :-
        ならびから削除(_削除する要素,_残り対象ならび,_削除されたならび),!.
ならびから削除(_削除する要素,[_要素|_残り対象ならび],[_要素|_残り削除ならび]) :-
    ならびから削除(_削除する要素,_残り対象ならび,_残り削除ならび),!.

キューを保存する(L) :-
        tell('キュー保存.pro'),
        write(L),
        write('.\n'),
        told.

影を生み出す(Term,_影,Option) :-
        thread_create(Term,_影,Option).

影を終わる :-
        thread_self(_番号),
        thread_detach(_番号).


取り次ぎ(_取り次ぎ) :-
        message_queue_create(_取り次ぎ).

言伝を取り出す(_取り次ぎ,_言伝,_限界時間) :-
        thread_get_message(_取り次ぎ,_言伝,[timeout(_限界時間)]).

言伝を取り出す(_言伝) :-
        thread_get_message(_言伝).

言伝を送る(_番号,_言伝) :-
        thread_send_message(_番号,_言伝).

取り次ぎを立てる(_取り次ぎ) :-
        message_queue_create(_取り次ぎ,[]).

取り次ぎを解消する(_取り次ぎ) :-
        message_queue_destroy(_取り次ぎ).