このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1307166756/277
#  [1] 授業単元:配列 
#  [2] 問題文(含コード&リンク):  
#  入力する値は0以上の整数とし、下記の動作するプログラムを作成しなさい。 
#  要素数10の整数型配列を作成し、入力された0以外の数値のうち、これまで入力されていない値だけを追加、記憶させる。 
#  追加登録を行った場合には、現在何個の数値が記憶されているかを表示させる。 
#  0が入力された場合、または10個の値の登録が完了した場合は、記憶している全ての情報を表示して、プログラムを終了させる。 
#  例:5                 例:1 
#    1個登録                1個登録 
#    5                   2 
#    既に登録あり              2個登録 
#    3                   … 
#    2個登録                10 
#    0                   10個登録 
#    [5 3]を登録しました          登録上限に到達 
#                        [1 2 3 4 5 6 7 8 9 10] 
#  

'入力する値は0以上の整数とし、下記の動作するプログラムを作成しなさい。要素数10の整数型配列を作成し、入力された0以外の数値のうち、これまで入力されていない値だけを追加、記憶させる。追加登録を行った場合には、現在何個の数値が記憶されているかを表示させる。0が入力された場合、または10個の値の登録が完了した場合は、記憶している全ての情報を表示して、プログラムを終了させる' :-
        abolish(記憶/1),
        数の記憶.

数の記憶 :-
        get_integer(N),
        数の記憶(N),!.
数の記憶 :- 数の記憶.

数の記憶(0) :-
        findall(_数,記憶(_数),L),
        concat_atom(L,' ',S),
        writef('[%t]を登録しました\n',[S]).
数の記憶(N) :-
        記憶(N),
        write('既に登録あり\n'),
        !,fail.
数の記憶(N) :-
        assertz(記憶(N)),
        findall(_数,記憶(_数),L),
        length(L,_記憶個数),
        writef('%t個登録\n',[_記憶個数]),
        _記憶個数 = 10,
        concat_atom(L,' ',S),
        writef('登録上限に到達\n[%t]\n',[S]).