このディレクトリの索引

# 出典 :: C/C++の宿題片付けます 131代目 #510 # [1] プログラミング入門 # [2] 文字列sを逆に並べる関数reverse(s) を書け。 # さらにこの関数を使って、入力を行ごとに反転させるプログラムを作成せよ。という問題です。 文字列の反転('',''). 文字列の反転(_文字列,_反転された文字列) :- 後方か一文字ずつ取り出し文字列がなくなるまで反転を続ける(_文字列,_反転された文字列). 後方か一文字ずつ取り出し文字列がなくなるまで反転を続ける(_文字列,_反転された文字列) :- 後方から一文字ずつ取り出し(_文字列,_文字,_残り文字列), 文字列がなくなるまで反転を続ける(_文字,_残り文字列,_反転された文字列). 後方から一文字ずつ取り出し(_文字列,_文字,_残り文字列) :- sub_atom(_文字列,S,1,0,_文字), sub_atom(_文字列,0,S,1,_残り文字列). 文字列がなくなるまで反転を続ける(_文字,_残り文字列,_反転された文字列) :- 文字列の反転(_残り文字列,_反転された文字列_2), atom_concat(_文字,_反転された文字列_2,_反転された文字列). 入力を行ごとに反転させる(_入力,_行ごとに反転した行ならび) :- forall((repeat,(at_end_of_stream(_入力),!,fail;入力行を反転させる(_入力,_反転した行))),writef('%w\n',[_反転した行])). 入力行を反転させる(_入力,_反転した行) :- 行入力(_入力,_行), 文字列の反転(_行,_反転した行). 行入力(_入力,_行) :- read_line_to_codes(_入力,_コードならび), atom_codes(_行,_コードならび).