このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1308749241/521
#  [1] 授業単元:リスト 
#  [2] 問題文(含コード&リンク): http://codepad.org/BB8PLG9F 
#  問題文もリンク先に書かせていただきました。  
#  
#  【問題】配列を使ったリスト
#  課題問題1のプログラムを下の条件を満たすように変更せよ。
#  (1)リストへのデータの挿入を行う関数int InsertNode(int no,int insdata,int data[])を追加せよ。
#    ただし、noは挿入するノードのリスト番号である。リスト番号は先頭ノードを1としたノードの順番を示す。
#    insdataは挿入するデータであり、正の整数である。data[]はリストを表す配列である。
#    また、挿入が成功したら戻り値0、配列が満杯等で挿入が失敗したら戻り値-1を返し、main関数で
#    挿入の成功・失敗を表示すること。
#  (2)リストからデータを削除する関数int DeleteNode(int no,int data[])を追加せよ。ただし、noは
#    削除するノードのリスト番号である。また、削除が成功したら戻り値0、削除対象がない等で失敗したら
#    戻り値-1を返し、main関数で挿入の成功・失敗を表示する事。
#  (3)データを初期化子でセットし、最初にリストを表示してからデータの編集選択(挿入、削除、終了)を
#    繰り返し行えるようにする。挿入・削除後にはリストを表示する。終了を選択するとプログラムを終了する。
#  
#  実行例を下に示す。
#  
#  ./a.out[Enter]
#  リスト:2 4 6 8 10 12 14 16 18
#  編集選択(挿入=i、削除=d、編集終了=q):i[Enter]
#  挿入位置:11[Enter]
#  挿入失敗です!
#  リスト:2 4 6 8 10 12 14 16 18
#  編集選択(挿入=i、削除=d、編集終了=q):i[Enter]
#  挿入位置:4[Enter]
#  挿入データ:7[Enter]
#  リスト:2 4 6 7 8 1 0 12 14 16 18
#  編集選択(挿入=i、削除=d、編集終了=q):d[Enter]
#  削除位置:7[Enter]
#  リスト:2 4 6 7 8 10 14 16 18
#  編集選択(挿入=i、削除=d、編集終了=q):d[Enter]
#  削除位置:12[Enter]
#  削除失敗です!
#  リスト:2 4 6 7 8 10 14 16 18
#  編集選択(挿入=i、削除=d、編集終了=q):q[Enter]

挿入(_何番目,_挿入値,L1,L2) :-
        length([_|L0],_何番目),
        append(L0,R,L1),
        append(L0,[_挿入値|R],L2).

削除(_何番目,L1,L2) :-
        length([_|L0],_何番目),
        append(L0,[_|R],L1),
        append(L0,R,L1).