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


'3名の名前と性別、10桁の会員番号を入力し表示せよ
*会員番号は数字のみで入力し、2,6桁目の後に「-」を出力で表示せよ
入力(1234567890)→出力(12-3456-7890)
*入力された会員番号が10桁に満たない場合、
または大きい場合は再度入力する指示を入れること' :-
        '3名の名前と性別、10桁の会員番号を入力し
*会員番号は数字のみで入力し、
*入力された会員番号が10桁に満たない場合、
または大きい場合は再度入力する指示を入れること'(_3名の名前と性別と会員番号),
        '表示せよ
*会員番号は数字のみで入力し、2,6桁目の後に「-」を出力で表示せよ
入力(1234567890)→出力(12-3456-7890)'(_3名の名前と性別と会員番号).


'3名の名前と性別、10桁の会員番号を入力し
*会員番号は数字のみで入力し、
*入力された会員番号が10桁に満たない場合、
または大きい場合は再度入力する指示を入れること'(_3名の名前と性別と会員番号) :-
        findall([_名前,_性別,_会員番号],(
                    between(1,3,_),
                    名前を得る(_名前),
                    性別を得る(_性別),
                    '会員番号を得る
*会員番号は数字のみで入力し、
*入力された会員番号が10桁に満たない場合、
または大きい場合は再度入力する指示を入れること'(_会員番号)),
                _3名の名前と性別と会員番号).


名前を得る(_名前) :-
        write('名前を入力してください : '),
        get_line(_名前).


性別を得る(_性別) :-
        整数を得る('性別を番号で入力してください 1..男 2..女\n',between(1,2,_性別番号),_性別番号),
        性別番号から性別を得る(_性別番号,_性別).

性別番号から性別を得る(1,男).
性別番号から性別を得る(2,女).


'会員番号を得る
*会員番号は数字のみで入力し、
*入力された会員番号が10桁に満たない場合、
または大きい場合は再度入力する指示を入れること'(_会員番号) :-
        write('会員番号(数字10桁)を入力してください : '),
        get_line(Line),
        '診断:: 会員番号を得る'(Line,_会員番号),!.

'会員番号を得る
*会員番号は数字のみで入力し、
*入力された会員番号が10桁に満たない場合、
または大きい場合は再度入力する指示を入れること'(_会員番号) :-
        '会員番号を得る
*会員番号は数字のみで入力し、
*入力された会員番号が10桁に満たない場合、
または大きい場合は再度入力する指示を入れること'(_会員番号).


'診断:: 会員番号を得る'(Line,_会員番号) :-
        atom_chars(Line,Chars),
        会員番号は数字のみで入力し(Chars),
        '入力された会員番号が10桁に満たない場合、
または大きい場合は再度入力する指示を入れること'(Chars),!.

'診断:: 会員番号を得る'(Line,_会員番号) :-
        write('再入力をお願いします\n'),
        fail.


会員番号は数字のみで入力し(Chars) :-
        forall((member(A,Chars),
                member(A,['0','1','2','3','4','5','6','7','8','9'])),true),!.
会員番号は数字のみで入力し(Chars) :-
        writef('入力された文字列 %t には数字以外の文字が混入しています\n',[Chars]),
        fail.


'入力された会員番号が10桁に満たない場合、
または大きい場合は再度入力する指示を入れること'(Chars) :-
        length(Chars,10),!.
'入力された会員番号が10桁に満たない場合、
または大きい場合は再度入力する指示を入れること'(Chars) :-
        writef('入力された文字列 %t は10桁でありません\n',[Chars]),
        fail.


'表示せよ
*会員番号は数字のみで入力し、2,6桁目の後に「-」を出力で表示せよ
入力(1234567890)→出力(12-3456-7890)'(_3名の名前と性別と会員番号) :-
        append(_,[[_名前,_性別,_会員番号]|R],_3名の名前と性別と会員番号),
        number_chars(_会員番号,[_1,_2,_3,_4,_5,_6,_7,_8,_9,_10]),
        atomic_list_concat([[_1,_2,-,_3,_4,_5,_6,-,_7,_8,_9,_10],_会員表示文字列),
        writef('名前: %t\n性別: %t\n会員番号: %t\n\n',[_会員番号表示文字列]),
        R = [].