1から始まる配列

MATLAB を使っていると、配列のインデックスが 1 から始まることに困惑します。昔は Pascal とか使っていてなんとも思わなかったのですが、最近 C、JavaPython などの言語を使い慣れていると、インデックス が 1 から始まっていることが非常に使いにくいのです。うまい例を示せるかな…。
いま、ある配列*1 A の要素 n から m までの要素を切り出して新しい配列 B を作るとしましょう。MATLAB では、このように書きます。

B = A(n : m);

ここで、元々 A(p) だった要素が B のどこにあるかを計算する場合、C 言語であれば B[p - n] というふうに書けますが、MATLAB ですと、B(p - n + 1) と書かないといけないのです。もしかすると慣れの問題なのかも知れませんが、このようなインデックス計算がたくさん出てくると、頭が混乱してきます。いちいち例を思い浮かべながら式を書かないと、頻繁にポカをします。
昔は、配列の要素が 0 から始まることに違和感を覚えたこともありますが*2、今となってみると、インデックスの計算が簡単というメリットが大きいことを実感したのでした。(三文プログラマなので、気づくのに 20年もかかったのだ!)

*1:MATLAB だと、本当は行列あるいはベクトルなのでしょうが、突っ込まないで。

*2:もう 20年以上も前だな。