Ruby の修飾子は使わない人なので、Algol 風の教科書コードからの書き換えでしくった
-- 元のコード repeat i := i + 1; until a[i] >= pivot;
これを Ruby で
# Ruby i += 1 until a[i] >= pivot
とやってしまった。普通の修飾子であるので、本体が評価される前に until の条件が評価されてしまう
正しくは
# Ruby begin i += 1 end until a[i] >= pivot
式が begin〜end であった場合は、まず一回実行されるようになる。この、特定の場合だけふるまいが異なるというのは驚き最小の法則的にどうなんだろう