このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1349527750/79
#  [1] 授業単元:C言語 文字列 
#  [2] 問題文 
#  http://ime.nu/codepad.org/kqhMSJiH 
#  
#  /*
#  
#  ・問題文
#  名字と名前(null文字を除き10文字以内)を入力し、実行例のように氏名を表示する。
#  なお、
#  
#  氏名は名前の次に1文字あけて名字を表示する
#  名前は最初の文字を大文字に、2文字以降を小文字に変換して表示する。
#  名字はすべて大文字に変換して表示する
#  
#  とし、文字列関数を用いて行う。
#  
#  ・実行例
#  
#  名字と名前を入力してください
#  yamada taro
#  出力: Taro YAMADA
#  名字と名前を入力してください
#  kawada hanako
#  出力: Hanako KAWADA
#  ....
#  
#  */

'名字と名前(null文字を除き10文字以内)を入力し、実行例のように氏名を表示する。なお、氏名は名前の次に1文字あけて名字を表示する。名前は最初の文字を大文字に、2文字以降を小文字に変換して表示する。名字はすべて大文字に変換して表示する' :-
        '名字と名前(null文字を除き10文字以内)を入力し'(_名字,_名前),
        '名前は最初の文字を大文字に、2文字以降を小文字に変換して'(_名前,_変換後の名前),
        '名字はすべて大文字に変換して'(_名字,_大文字に変換された名字),
        '実行例のように氏名を表示する。なお、氏名は名前の次に1文字あけて名字を表示する'(_変換後の名前,_大文字に変換されたの名字).

'名字と名前(null文字を除き10文字以内)を入力し'(_名字,_名前) :-
        write('名字と名前を入力してください\n'),
        一行読み取る(_入力された名字),
        一行読み取る(_入力された名前),
        名字はnull文字をのぞき10文字以内(_入力された名字,_名字),
        名前はnull文字をのぞき10文字以内(_入力された名前,_名前).

名字はnull文字をのぞき10文字以内(_入力された名字,_名字) :-
        null文字をのぞき10文字以内(_入力された名字,_名字).

名前はnull文字をのぞき10文字以内(_入力された名前,_名前) :-
        null文字をのぞき10文字以内(_入力された名前,_名前).

null文字をのぞき10文字以内(_文字列,_null文字をのぞき10文字以内に制限された文字列) :-
        null文字をのぞき(_文字列,_null文字を除いた文字列),
        '10文字以内'(_null文字を除いた文字列,_null文字をのぞき10文字以内に制限された文字列).

null文字をのぞき(_文字列,_null文字を除いた文字列) :-
        findall(_文字,(
                    sub_atom(_文字列,_,1,_,_文字),
                    \+(_文字 = '')),
                _文字ならび),
        atom_chars(_null文字を除いた文字列,_文字ならび).

'10文字以内'(_文字列,_10文字以内に制限された文字列) :-
        sub_atom(_文字列,0,10,_,_10文字以内に制限された文字列),!.
'10文字以内'(_文字列,_文字列).

'名前は最初の文字を大文字に、2文字以降を小文字に変換して'(_名前,_変換後の名前) :-
        名前は最初の文字を大文字に(_名前,_大文字化された最初の文字),
        '2文字以降を小文字に変換して'(_名前,_小文字化された2文字以降),
        atomic_list_concat([_大文字化された最初の文字,_小文字化された2文字以降],_変換後の名前).

名前は最初の文字を大文字に(_名前,_大文字化された最初の文字) :-
        sub_atom(_名前,0,1,R,_最初の文字),
        to_upper(_最初の文字,_大文字化された最初の文字).

'2文字以降を小文字に変換して'(_名前,_小文字化された2文字以降) :-
        sub_atom(_名前,1,_,0,_2文字以降),
        to_lower(_2文字以降,_小文字化された2文字以降).

'名字はすべて大文字に変換して'(_名字,_大文字に変換された名字) :-
        to_upper(_名字,_大文字に変換された名字).

'実行例のように氏名を表示する。なお、氏名は名前の次に1文字あけて名字を表示する'(_変換後の名前,_大文字に変換された名字) :-
        writef('出力: %t %t\n',[_変換後の名前,_変換後の名字]).


%  ・実行例
%  
%  名字と名前を入力してください
%  yamada taro
%  出力: Taro YAMADA
%  名字と名前を入力してください
%  kawada hanako
%  出力: Hanako KAWADA
%  ....