副作用を排除するとプログラムが分かりやすくなるというのが、関数型 プログラミング言語の信者の言ですが。何か、 ヒープソート を見る限り、副作用版の方が 明らかにコンパクトで分かりやすいですね。まあ、パッと見で把握するのが 難しい規模のプログラムになると、副作用の無い有り難さが身に染みてくるの かもしれませんが。それなら、副作用を大域的に染出さないようにすれば、 ローカルには副作用ジャブジャブでも良いんじゃね?とか、個人的には思い ました。Haskell による副作用版ヒープソートの実装は以下のようになります。
forM_
は手続き型言語の for 文のように振る舞う関数です。
forM_ lst $ \i -> func i
のように記述すると、lst
の要素を1つ1つ i
に束縛して、それぞれ func i
を実行します。