このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1307166756/858
#  [1] 授業単元:文字列  
#  [2] 問題文(含コード&リンク):  
#  1行の入力は、すべて英字とし、最大80文字とする。 
#  初めに入力した1行の文字列に対して、2行目に入力した文字を3行目に入力した文字列に置換した文字列を作成し、結果を表示するプログラムを作成しなさい。  
#  

'1行の入力は、すべて英字とし、最大80文字とする。初めに入力した1行の文字列に対して、2行目に入力した文字を3行目に入力した文字列に置換した文字列を作成し、結果を表示する' :-
        '1行の入力は、すべて英字とし、最大80文字とする。初めに入力した1行の文字列に対して'(_初めに入力した1行の文字列),
        '2行目に入力した文字を'(_2行目に入力した文字),
        '3行目に入力した文字列に'(_3行目に入力した文字列),
        '置換した文字列を作成し'(_初めに入力した1行の文字列,_2行目に入力した文字,_3行目に入力した文字列,_置換した文字列),
        '結果を表示する'(_置換した文字列).

'1行の入力は、すべて英字とし、最大80文字とする。初めに入力した1行の文字列に対して'(_初めに入力した1行の文字列) :-
        length(L1,80),
        '英字か改行文字の入力'(_英字か改行文字),
        '1行の入力は、すべて英字とし、最大80文字'(L1,_英字か改行文字,Chars),
        atom_chars(_初めに入力した1行の文字列,Chars).

'1行の入力は、すべて英字とし、最大80文字'([],_,[]) :- !.
'1行の入力は、すべて英字とし、最大80文字'(_,'\n',[]) :- !.
'1行の入力は、すべて英字とし、最大80文字'([_|R1],_英字,[_英字|R2]) :-
        英字の入力(_英字か改行文字2),
        '1行の入力は、すべて英字とし、最大80文字'(R1,_英字か改行文字2,R2).

英字か改行文字の入力(_英字か改行文字) :-
        get_char(Char),
        英字か改行文字の入力診断(Char,_英字か改行文字),!.
英字か改行文字の入力(_英字か改行文字) :-
        英字か改行文字の入力(_英字か改行文字).

英字か改行文字の入力診断('\n','\n') :- !.
英字か改行文字の入力診断(Char,Char) :-
        Char @>= 'a',
        char @=< 'z',!.
英字か改行文字の入力診断(Char,Char) :-
        Char @>= 'A',
        char @=< 'Z',!.
英字か改行文字の入力診断(Char,_) :-
        writef('%tは英字ではありません。この入力を無視します\n',[Char]),
        fail.

'2行目に入力した文字を'(_2行目に入力した文字) :-
        get_char(_2行目に入力した文字).

'3行目に入力した文字列に'(_3行目に入力した文字列) :-
        get_line(_3行目に入力した文字列).

'置換した文字列を作成し'(_初めに入力した1行の文字列,_2行目に入力した文字,_3行目に入力した文字列,_置換した文字列) :-
        atom_chars(_初めに入力した1行の文字列,Chars),
        '置換した文字ならびを作成し'(_初めに入力した1行の文字ならび,_2行目に入力した文字,_3行目に入力した文字列,_置換した文字ならび),
        concat_atom(_置換した文字ならび,_置換した文字列).

'置換した文字ならびを作成し'([],_,_,[]) :- !.
'置換した文字ならびを作成し'([_2行目に入力した文字|R1],_2行目に入力した文字,_3行目に入力した文字列,[_3行目に入力した文字列|R4]) :-
        '置換した文字ならびを作成し'(R1,_2行目に入力した文字,_3行目に入力した文字列,R4).
'置換した文字ならびを作成し'([_文字|R1],_2行目に入力した文字,_3行目に入力した文字列,[_文字|R4]) :-
        '置換した文字ならびを作成し'(R1,_2行目に入力した文字,_3行目に入力した文字列,R4).

'結果を表示する'(_初めに入力した1行の文字列,_2行目に入力した文字,_3行目に入力した文字列,_置換した文字列) :-
        writef('初めに入力した1行の文字列 %t\n',[_初めに入力した1行の文字列]),
        writef('2行目に入力した文字 %t\n',[_2行目に入力した文字]),
        writef('3行目に入力した文字列 %t\n',[_3行目に入力した文字列]),
        writef('置換した文字列 %t\n',[_置換した文字列]).