このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1263824755/174
#  [1] データ構造とプログラミング  
#  [2]  
#  リングバッファを使って、9個のキューを作り、データを追加したり、 
#  データを取り出すプログラムを完成させなさい。 
#  以下の添付にあるプログラムを完成させろという課題です。 
#  http://ime.nu/www.geocities.jp/pegasus_violet/en5-2.pdf 
# 演習問題5.2 リングバッファを使って、9 個のキュー(配列は10 元)を作り、
# データを追加したり(EnQue), データを取り出す(DeQue) プログラムを
# 完成させなさい29。プログラムの動作仕様は以下のようである。
# 1. 数字を入力するとキューが伸びる
# 2. d(deque) を入力するとfront を標準出力に出力
# 3. s(show) を入力するとキューを表示
# 4. キューがいっぱいだったらエラーメッセージを出す
# 5. q で終了
# 
#  

'New'(X-X).
'Enque'(_要素,X-[_要素|Y],X-Y).
'Deque'(_要素,[_要素|X]-Y,X-Y).
'Empty'(X-Y) :- X == Y.

キュー操作 :- 'New'(Q1),キュー操作機能選択(Q1).
キュー操作.

キュー操作機能選択(Q1) :-
    get_line(_機能選択),
    キュー操作機能選択(_機能選択,Q1,Q2),
    キュー操作機能選択(Q2),!.

キュー操作機能選択(q,_,_) :- !,fail.
キュー操作機能選択(d,Q1,Q2) :- 'Deque'(_要素,Q1,Q2), write_formatted('%t\n',[_要素]),!.
キュー操作機能選択(s,Q1,Q1) :- キュー表示(Q1),!.    
キュー操作機能選択(N,Q1,Q2) :- 'Enque'(N,Q1,Q2),!.

キュー表示(X-X) :- !.
キュー表示(X-Y) :- \+(var(X),var(Y),キュー表示(X-[Y]),!.
キュー表示(X-Y) :- \+(var(Y)),
    append(U,Y,X),
    concat_atom(U,' ',S),
    write_formatted('%t\n',[S]),!.