このディレクトリの索引
#  
#  整数を入力する場合の一般型
#  

整数を得る(Instream,_催促文ならび,_整数を含む条件,_整数ならび) :-
        list(_催促文ならび),
        findall(_整数,(
                    member(_催促文,_催促文ならび),
                    整数を得る(Instream,_催促文,_整数を含む条件,_整数)),
                _整数ならび),!.
整数を得る(Instream,_催促文,_整数を含む条件,_整数) :-
        催促文の出力(_催促文),
        行入力(Instream,_行),
        '診断: 整数を得る'(_行,_整数を含む条件,_整数),!.
整数を得る(Instream,_催促文,_整数を含む条件,_整数) :-
        整数を得る(Instream,_催促文,_整数を含む条件,_整数).

'診断: 整数を得る'(end_of_file,_整数を含む条件,end_of_file) :- !.
'診断: 整数を得る'('',_,_) :- !,fail.
'診断: 整数を得る'(_行,_整数を含む条件,_整数) :-
        read_term_from_atom(_行,_整数,[]),
        integer(_整数),
        '診断: 整数を含む条件'(_整数,_整数を含む条件),!.
'診断: 整数を得る'(_行,_整数を含む条件,_整数) :-
        \+((read_term_from_atom(_行,_整数,[]),integer(_整数))),
        writef('入力された %t からは数が得られません。再入力をお願いします。\n',[_行]),
        fail.

'診断: 整数を得る'(end_of_file,end_of_file) :- !.
'診断: 整数を得る'('',_) :- !,fail.
'診断: 整数を含む条件'(_整数,_整数を含む条件) :-
        call(_整数を含む条件),!.
'診断: 整数を含む条件'(_整数,_整数を含む条件) :-
        writef('入力された %t は %t が偽となります。\n',[_整数,_整数を含む条件]),
        fail.

整数を得る(_催促文,_整数を含む条件,_整数) :-
        整数を得る(current_input,_催促文,_整数を含む条件,_整数).

整数を得る(_催促文,_整数) :-
        整数を得る(current_input,_催促文,true,_整数).

整数を得る(_整数) :-
        整数を得る(current_input,'',true,_整数).

催促文の出力('') :- !.
催促文の出力(_催促文) :-
        writef('%tを入力してください : ',[_催促文]).

n個の整数を得る(_n,_催促文,_整数ならび) :-
        length(_整数ならび,_n),
        findall(_整数,(
                    部分ならび(_整数ならび,_,_,_何番目,_,_,_,L3),
                    writef('[%t/%t]番目の',[_何番目,_n]),
                    整数を得る(_催促文,_整数)),
                _整数ならび).

行入力(Stream,_行) :-
        read_line_to_codes(Stream,Codes),
        atom_codes(_行,Codes).

行入力(_行) :-
        行入力(current_input,_行).

list([_|_]) :- !.
list([].