このディレクトリの索引

#  [1] 授業単元: プログラミング 〜構造体〜 
#  [2] 問題文(含コード&リンク): 3名の名前と性別、10桁の会員番号を入力し表示せよ 
#  *会員番号は数字のみで入力し、2,6桁目の後に「-」を出力で表示せよ 
#  入力(1234567890)→出力(12-3456-7890) 
#  *入力された会員番号が10桁に満たない場合、 
#  または大きい場合は再度入力する指示を入れること

'3名の名前と性別、10桁の会員番号を入力し表示せよ *会員番号は数字のみで入力し、2,6桁目の後に「-」を出力で表示する' :-
        '3名のならびを確保'(_名前・性別・会員番号ならび),
        '3名の名前と性別、10桁の会員番号を入力し'(_名前・性別・会員番号ならび),
        表示する(_名前・性別・会員番号ならび).

'3名のならびを確保'(_名前・性別・会員番号ならび) :-
        length(_名前・性別・会員番号ならび,3).

'3名の名前と性別、10桁の会員番号を入力し'([]).
'3名の名前と性別、10桁の会員番号を入力し'([[_名前,_性別,_会員番号]|R]) :-
        名前入力(_名前),
        性別入力(_性別),
        会員番号入力(_会員番号),
        '3名の名前と性別、10桁の会員番号を入力し'(R).
        
名前入力(_名前) :-
        write('名前を入力してください : '),
        get_line(Line),
        名前入力診断(Line,_名前),!.

性別入力(_性別),
        write('性別(男/女)を入力してください : '),
        get_line(_性別),!.

会員番号入力(_会員番号) :-
        write('会員番号を入力してください(数字10桁) : '),
        get_line(Line),
        会員番号入力診断(Line,_会員番号),!.
会員番号入力(_会員番号) :-
        会員番号入力(_会員番号).

会員番号入力診断(Line,Line) :-
        atom_chars(Line,Chars),
        length(Chars,10),
        全て数字(Chars),!.

会員番号入力診断(Line,_) :-
        writef('入力された%tからは会員番号(10桁)を得られません。再入力をお願いします。\n',[Line]),
        fail.

全て数字([]) :- !.
全て数字([A|R]) :-
        member(A,['0','1','2','3','4','5','6','7','8','9']),
        全て数字(R).

表示する(_名前・性別・会員番号ならび) :-
        append(_,[[_名前,_性別,_会員番号]|R],_名前・性別・会員番号ならび),
        atom_chars(_会員番号,[_1,_2,_3,_4,_5,_6,_7,_8,_9,_10]),
        concat_atom([_1,_2,'-',_3,_4,_5,_6,'-',_7,_8,_9,_10],_会員番号表示),
        writef('名前=%t,性別=%t,会員番号=%t\n',[_名前,_性別,_会員番号表示]),
        R = [].