このディレクトリの索引
#
#  質問付き入力の一般型を示す。
#  

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

整数を得る(_催促文,_整数ならび) :-
        list(_催促文),
        length(_催促文,Len),
        length(_整数ならび,Len),

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

整数を得る(_催促文ならび,_整数ならび) :-
        list(_催促文ならび),
        findall(_整数,(
                    部分ならび(_催促文ならび,_,_,_,1,[_催促文],_,_),
                    整数を得る(_催促文,_整数)),
                _整数ならび),!.
整数を得る(_催促文,_整数) :-
        整数を得る(_催促文,true,_整数).

整数を得る(_催促文,_整数を含む制約,_整数) :-
        writef('%tを入力してください : ',[_催促文]),
        get_line(Line),
        '診断: 整数を得る'(Line,_催促文,_整数を含む制約,_整数),!.
整数を得る(_催促文,_整数を含む制約,_整数) :-
        整数を得る(_催促文,_整数を含む制約,_整数).

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

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

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

数を得る(_催促文ならび,_数ならび) :-
        list(_催促文ならび),
        findall(_数,(
                    部分ならび(_催促文ならび,_,_,_,1,[_催促文],_,_),
                    整数を得る(_催促文,_数)),
                _数ならび),!.
数を得る(_催促文,_数) :-
        数を得る(_催促文,true,_数).

数を得る(_催促文,_数を含む制約,_数) :-
        writef('%tを入力してください : ',[_催促文]),
        get_line(Line),
        '診断: 数を得る'(Line,_催促文,_数を含む制約,_数),!.
数を得る(_催促文,_数を含む制約,_数) :-
        数を得る(_催促文,_数を含む制約,_数).

'診断: 数を得る'(Line,_,_数を含む制約,_数) :-
        atom_to_term(Line,_数,_),
        数値(_数),
        call(_数を含む制約),!.
'診断: 数を得る'(Line,_催促文,_数を含む制約,_数) :-
        writef('入力された %t からは %t が得られません。再入力をお願いします。\n',[_数,_催促文]),
        fail.

数値(_数) :-
        number(_数),!.
数値(_分子/_分母) :-
        integer(_分子),
        integer(_分母),
        \+(_分母=0).