昔のBASICのFOR~NEXT文 (基礎文法最速マスターで思い出した)
はてな界隈でいろんな言語の「基礎文法最速マスター」なんてのが流行っているようで、とうとう「fortran 基礎文法最速マスター」なんて記事も現れた。
対抗してkumajiri最速マスターを書いてもいいのだが、それはさておき、昔のBASICで思い出したことがある。
太古のBASICでは、繰返し文は FOR~NEXTしかなかった。その後 WHILE~WENDも追加されたのだけど、REPEAT~UNTILはなかったような。で、そのFOR~NEXTなんだけど、昔のBASICインタプリタ時代には、FORで繰返しループをスタックに詰んでNEXTでそれを読んで繰り返してた。
- FORが来たら、制御変数とステップ値(省略すると1)、終値をスタックに詰む
- NEXTが来たら、
- 次に制御変数があれば、該当する変数が積まれてるところまでスタックをPOP
- 制御変数にステップ値を足して、終わり値を超えていなければFORの次に戻る
- 超えてたら、スタックをPOPして次に
こういう実装なので、FORとNEXTが1対1じゃないプログラムは平気で書けたし、IF XX THEN NEXT I ELSE NEXT J なんてのも書けた。
FORとNEXTを使って catch~thru みたいなのも書けた。変態だ。(実装依存だけど)。
これをコンパイルするのは大変なんだけど、MSのコンパイラはどうやってたっけなあ。ソース上だけ見てコンパイルしてたんだっけなあ。
自分が卒論で書いたコンパイラはソース上の関係しか見てなかったはず。
昔のBASICといえば、変数の型があるようでないようなのもあったような。もう忘れかけてる。
ディスカッション
コメント一覧
終わり値が1違うとかでしたっけ? もう覚えてないなあ。
REDは3-4年使ってたけど、そんなに悪くなかったような。
N88-BASIC (86)と
F-BASICで
同じマイクロソフト系なのに、
FORしてるときの動きは同じでも、
FORを終わったときのループ変数の値がちがったりして、
けっこう苦労した > F社の依頼でつくったN->Fコンヴァーター
(Lattice-Cで書きました。FM-16βか11の上のRED(よく異常終了する)で編集)