このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1307166756/889
#  [1] 授業単元:プログラミング  
#  [2] 問題文(含コード&リンク):http://ime.nu/codepad.org/MysbRMqT  
#  
#  キーボードから入力した数だけのロッカーを割り付け、各ロッカーにキーボード
#  から入力したデータを保存し、最後に保存した内容を表示するプログラム
#  kadai10-1.cを次のステップにしたがって 作成せよ。但し、各ロッカーには
#  次のロッカーへのポインター(次のロッカーの鍵と思えばわかりやすい)も
#  荷物に相当するデータといっしょに保存するものとする。
#  
#  1-1 データ構造として次の構造体を用意する。
#   struct rocker {
#       int data; //保存するデータ
#       struct rocker *next; //次のボックスのアドレス(鍵)
#   };
#  
#  1-2 最初の鍵として次のポインターを大域変数として用意する。
#   struct rocker *head;
#  
#  1-3 1個のロッカーを割り当てて、最後に割り当てたロッカーに新しく割り当てた
#  ロッカーのアドレス(鍵)を保存する関数 struct rocker *new_rocker(struct rocker *last_rocker)を定義しなさい。
#  ただし引数 last_rockerは最後に作ったボックスのポインターとする。この間数は
#  新しく割り当てたロッカーのアドレスを返すものとする。
#  
#  1-4 全てのロッカーに保存したデータを最初のロッカーから順番に表示していく
#  関数 void display_rockers(struct rocker *pt)を定義しなさい。
#   ただし、実行結果が次のようになるように定義しなさい。
#  
#  gcc kadai10-1.c
#   ./a.out
#   3      説明:ロッカーの数を入力
#  1 3 4         データ入力
#  [ data = 1 ]->[ data = 3 ]->[ data = 4 ]       表示
#  
#   ※ 表示部分では printf("[ data = %d ]->", xxxxx); もしくは printf("[ data = %d ]\n", xxxxxx);を使用する
#  

'キーボードから入力した数だけのロッカーを割り付け、各ロッカーにキーボードから入力したデータを保存し、最後に保存した内容を表示する' :-
        キーボードから入力した数だけのロッカーを割り付け(_ロッカーならび),
        各ロッカーにキーボードから入力したデータを保存し(_ロッカーならび),
        最後に保存した内容を表示する(_ロッカーならび).

キーボードから入力した数だけのロッカーを割り付け(_ロッカーならび) :-
        キーボードから入力した数(_キーボードから入力した数),
        length(_ロッカーならび,_キーボードから入力した数).

キーボードから入力した数(_キーボードから入力した数) :-
        write('ロッカーの数を入力してください : '),
        get_line(Line),
        キーボードから入力した数診断(Line,_キーボードから入力した数),!.
キーボードから入力した数(_キーボードから入力した数) :-
        キーボードから入力した数(_キーボードから入力した数).

キーボードから入力した数診断(Line,_キーボードから入力した数) :-
        atom_to_term(Line,_キーボードから入力した数,_),
        integer(_キーボードから入力した数),
        _キーボードから入力した数 >= 1,!.
キーボードから入力した数診断(Line,_キーボードから入力した数) :-
        writef('入力された %t から適切な整数が得られません。再入力をお願いします。\n',[Line]),
        fail.

各ロッカーにキーボードから入力したデータを保存し([]).
各ロッカーにキーボードから入力したデータを保存し([Line|R]) :-
        キーボードから入力したデータを(Line),
        各ロッカーにキーボードから入力したデータを保存し(R).

最後に保存した内容を表示する(_ロッカーならび) :-
        append(L0,[_データ|R],_ロッカーならび),
        length([_|L0],_n番目),
        writef('ロッカー[%t]: %t\n',[_n番目,_データ]),
        R = [].