このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1312201995/980
#  [1] 授業単元:基礎C 
#  [2] 問題文(含コード&リンク):以下の実行例のように,姓と名を入力すると,2 つの 
#  間にスペースを入れて連結した文字列を生成するプロ 
#  グラムを作成せよ.姓と名はそれぞれ配列family[] と 
#  first[] に,連結した文字列は配列fullname[] に格納 
#  すること.入力できる姓と名の長さはそれぞれ30 字ま 
#  でとする。 
#  例. Family name: Kouka 
#   First name: Dai 
#   Kouka Dai 
#  

'姓と名を入力すると,2つの間にスペースを入れて連結した文字列を生成する' :-
        姓の入力(_姓),
        名の入力(_名),
        '姓と名を入力すると,2つの間にスペースを入れて連結した文字列を生成する'(_姓,_名,_連結した文字列),
        writef('間にスペース入れて連結した文字列は「%t」\n',[_連結した文字列]).

'姓と名を入力すると,2つの間にスペースを入れて連結した文字列を生成する'(_姓,_名,_間にスペースを入れて連結した文字列) :-
        concat_atom([_姓,_名],' ',_間にスペースを入れて連結した文字列).

姓の入力(_姓) :-
        write('姓名の姓を入力して下さい : '),
        get_line(_姓),
        姓の入力診断(_姓),!.
姓の入力(_姓) :-
        姓の入力(_姓).

姓の入力診断(_姓) :-
        atom(_姓),
        sub_atom(_姓,0,Len,0,_姓),
        Len =< 30,!.
姓の入力診断(_姓) :-
        writef('入力された %t は姓名の姓として適切でありません。再入力をお願いします。\n',[_姓]),
        fail.

名の入力(_名) :-
        write('姓名の名を入力して下さい : '),
        get_char(_名),
        名の入力診断(_名),!.
名の入力(_名) :-
        名の入力(_名).

名の入力診断(_名) :-
        atom(_名),
        sub_atom(_名,0,Len,0,_名),
        Len =< 30,!.
名の入力診断(_名) :-
        writef('入力された %t は姓名の名として適切でありません。再入力をお願いします。\n',[_名]),
        fail.