このディレクトリの索引
#  [1]プログラム演習 
#  [2] 
#  一定の文字からなる列sを読み込み、以下の条件を満たす同じ個数の文字からなる列tを出力するプログラムを作りなさい。 
#  ただし、以下での単語とは空白以外の文字からなる列のこととする。 
#  1,s中の単語は同じ順番で t に現われる 
#  2,t中では単語は一つの空白に区切られる 
#  3,t中に最初の単語の最初の文字から最後の単語の文字までは列全体のちゅうおうに位置し、前後は空白である 
#  例えば文字の列 
#  _This___is__a____good___program___ 
#  を入力すると 
#  ______This_is_a_good_program______ 
#  が出力される。ここで、_は空白を表すものとする。 
#  [3]C言語 
#  [4]12/7 
#  [5]for,while,if文 ポインター 文字列 1,2次配列 関数の書き方 

'一定の文字からなる列sを読み込み、以下の条件を満たす同じ個数の文字からなる列tを出力するプログラムを作りなさい。 
ただし、以下での単語とは空白以外の文字からなる列のこととする。 
1,s中の単語は同じ順番で t に現われる 
2,t中では単語は一つの空白に区切られる 
3,t中に最初の単語の最初の文字から最後の単語の文字までは列全体のちゅうおうに位置し、前後は空白である'  :-
        '一定の文字からなる列sを読み込み、上記条件を満たす同じ個数の文字からなる列tを出力する'.

'一定の文字からなる列sを読み込み、上記条件を満たす同じ個数の文字からなる列tを出力する' :-
        '一定の文字からなる列sを読み込み'(_s),
        tの語彙部を確定する(_s,_sの文字列長,_tの語彙部),
        tの語彙部の前後の文字列を確定する(_tの語彙部,_sの文字列長,_前の空白列,_後の空白列),
        tを出力する(_前の空白列,_空白を挟んだ連結した語彙,_後の空白列).

tの語彙部を確定する(_s,_tの語彙部) :-
        atom_chars(_s,L_1),
        length(L_1,_sの文字列長),
        split(_s,[' '],_語彙ならび),
       atomic_list_concat(_語彙ならび,' ',_tの語彙部).

tの語彙部の前後の文字列を確定する(_tの語彙部,_sの文字列長,_前の空白列,_後の空白列) :-
        atom_length(_tの語彙部,_tの語彙部の長さ),
        _前後の空白合計 is _sの文字列長さ - _tの語彙部の長さ,
        length(_空白ならび,_前後の空白合計),
        all(_空白ならび,' '),
        空白を割り振る(_空白ならび,_前の空白列,_後の空白列).

空白を割り振る(L,S,S) :-
        append(L1,L1,L),
        atomic_list_concat(L1,S),!.
空白を割り振る(L,S1,S2) :-
        append([_|L1],L1,L),
        atomic_list_concat(L1,S2),
        atom_concat(' ',S2,S1).

tを出力する(_前の空白列,_空白を挟んだ連結した語彙,_後の空白列) :-
        atomic_list_concat([_前の空白列,_空白を挟んだ連結した語彙,_後の空白列],_t),
        writef('%t\n',[_t]).