このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1307166756/270
#  [1] 授業単元:配列 
#  [2] 問題文(含コード&リンク):  
#  要素数10の整数型配列を作成し、初期化の時に10個の任意の数値を代入して置く。 
#  1つの整数を入力させ、その整数が、配列の中に何個あるか、または、存在しないかを表示するプログラムを作成しなさい。 
#  例:配列が{9, 1, 2, 3, 4, 5, 6, 7, 8, 9}のとき 
#  1を入力したら、「1個あります」→終了 
#  9を入力したら、「2個あります」→終了 
#  10を入力したら、「存在しません」→終了 
#  

'要素数10の整数型配列を作成し、初期化の時に10個の任意の数値を代入して置く。1つの整数を入力させ、その整数が、配列の中に何個あるか、または、存在しないかを表示する' :-
        要素数10の整数型配列を作成し(L),
        初期化の時に10個の任意の数値を代入して置く(L),
        1つの整数を入力させ(_整数),
        その整数が、配列の中に何個あるか、または、存在しないか(_整数,L,_診断),
        表示する(_診断).

要素数10の整数型配列を作成し(L) :-
        length(L,10).

初期化の時に10個の任意の数値を代入して置く([]).
初期化の時に10個の任意の数値を代入して置く([N|R]) :-
        N is random(20),
        初期化の時に10個の任意の数値を代入して置く(R).

その整数が、配列の中に何個あるか、または、存在しないか(_整数,L,_何個) :-
        findall(1,append(_,[_整数|_],L),L2),
        length(L2,Len),
        Len > 0,
        全角整数表現(Len,_全角整数表現),
        concat_atom([_全角整数表現,個あります],_何個),!.
その整数が、配列の中に何個あるか、または、存在しないか(_整数,L,存在しません).

1つの整数を入力させ(_整数) :-
        write('1つの整数を入力してください : '),
        get_line(Line),
        整数入力診断(Line,_整数),!.
1つの整数を入力させ(_整数) :- 1つの整数を入力させ(_整数).

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

表示する(_診断) :-
        writef('%t\n',[_診断]).

全角整数表現(_整数値,_全角整数表現) :-
        number_chars(_整数値,Chars),
        findall(_全角数字,(
                    append(_,[A|_],Chars),
                    半角数字全角数字(A,_全角数字)),
                L),
        concat_atom(L,_全角整数表現).

半角数字全角数字('0',0).
半角数字全角数字('1',1).
半角数字全角数字('2',2).
半角数字全角数字('3',3).
半角数字全角数字('4',4).
半角数字全角数字('5',5).
半角数字全角数字('6',6).
半角数字全角数字('7',7).
半角数字全角数字('8',8).
半角数字全角数字('9',9).