1.5.2 不定の概念

FORTRAN 規格の基本的な概念に「不定」という概念がある. これは最も重要な概念の一つでありながら, 最もわかりにくい概念でもある. FORTRANを勉強したことのある人ならば, 文法書の中の

○○の時, 変数××は不定となる.
という記述を見て, 首をかしげた経験が1度はあると思う. 最初にこれを読むと, 「××に乱数が代入される」とか 「数値がメモリ上から消滅する」ということを想像してしまうが, 決してそういう意味ではない. 大抵の場合, ○○の時, ××がどうなるか, コンパイラはちゃんと知っている.

この奇怪な文章を理解するには, FORTRANの規格の文章が誰に対する文章であるかということを, よく理解しておく必要がある. FORTRAN規格というのは, 我々プログラマに対する文章であると同時に, FORTRANコンパイラをつくる人に対する文章でもある. したがって, この文章は2通りに翻訳できるように書いてあるのである. 上記の文章を, コンパイラをつくる人に対する文章に翻訳すれば,

○○の時, 変数××が占めていた記憶領域をどのように使ってもよい.
ということになり, 我々プログラマに対しては,
コンパイラをつくる人に, 上のように言ってしまったので, ××がどうなるかわからない.
ということになる.

もし, この文章をコンパイラを「作った人」から「使う人」へのメッセージだと 解釈してしまうと, 「自分で作っておきながら, わからない, どういうことだ」 と言いたくなってしまう. 特に, コンパイラに付属の文法書を読んでいると, そのような錯覚に落ちいりやすいが, FORTRANの文法書とはあくまでも,

 コンパイラを作る人と, それを使う人の 両者の責任関係を明確にするための法律
なのである.

「不定」とは逆に, 規格によって値が保証されている状態を「確定」という. 規格上, プログラムの中で引用できる変数は「確定」された変数だけである. 以下, 変数が「不定」となる例である.