逆から読んでも①

文字列を逆順にしたいです。

\makeatletter

\def\inverse#1{\@inverse #1\@nil}
\def\@inverse#1#2\@nil{%
  \def\blank{}%
  \def\endhantei{#2}%
  \ifx\blank\endhantei #1\else\@inverse #2\@nil #1\fi
}

\makeatother

原理

\inverse{あいう}

\@inverse あいう\@nil 

(#1 <- あ, #2 <- いう)

\@inverse いう\@nil

(#1 <- い, #2 <- う)

\@inverse う\@nil いあ

(#1 <- う, #2 <- )

ういあ

結果

入力:

\inverse{}

出力:ぺ

入力:

\inverse{しんぶんし}

出力:しんぶんし

入力:

\inverse{ぺりをでぃすたす}

出力:すたすぃでをりぺ

クイズ

入力:

\inverse{ぺりを でぃすたす}

の出力は何になるでしょう?(「を」と「で」の間は半角スペースです)
























出力:すたすぃでをりぺ

「をりぺでぃすたす」でも「すたすぃで␣をりぺ」でもありません。(␣は半角スペースの意)

制御綴直後の空白が吸収されるためです。これの解決は(全く考えていないが直感的には)ちょっと大変そうなのでまた今度……

ぺりをだねぇ