プログラミングのお題スレ Part4
■ このスレッドは過去ログ倉庫に格納されています
0207デフォルトの名無しさん
2014/06/25(水) 07:21:14.49ID:f3dQ4AsB'アルファベットの小文字aからzで成り立つS(0≦S≦100)が標準入力から与えられる。連続する文字をカウントする。出力の最後に改行を挿入すること。' :-
write('In: '),read(_文字列),
'連続する文字をカウントする'(_文字列,'',_出力文字列),
writef('Out:\n%t\n',[_出力文字列]).
'連続する文字をカウントする'('','') :- !.
'連続する文字をカウントする'(_文字列,_出力文字列) :-
文字列の先頭から同一文字を切り取る(_文字列,_連続文字,_連続文字数,_残り文字列),
'連続する文字をカウントする'(_残り文字列,_残り出力文字列),
atomic_list_concat([_連続文字,_連続文字数,_残り出力文字列],_出力文字列).
文字列の先頭から同一文字を切り取る(_文字列,_連続文字,_連続文字数,_残り文字列) :-
sub_atom(_文字列,0,1,_,_連続文字),
連続文字数と残り文字列を得る(_文字列,_連続文字,_連続文字数,_残り文字列).
連続文字数と残り文字列を得る(_文字列,_連続文字,_連続文字数,_残り文字列) :-
sub_atom(_文字列,_連続文字数,1,_,_文字),
\+(_連続文字 = _文字),
sub_atom(_文字列,_連続文字数,_,0,_残り文字列),!.
連続文字数と残り文字列を得る(_文字列,_連続文字,_連続文字数,'') :-
atom_length(_文字列,_連続文字数).
■ このスレッドは過去ログ倉庫に格納されています