昔の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. より:

    終わり値が1違うとかでしたっけ? もう覚えてないなあ。
    REDは3-4年使ってたけど、そんなに悪くなかったような。

  2. N88-BASIC (86)と
    F-BASICで
    同じマイクロソフト系なのに、
    FORしてるときの動きは同じでも、
    FORを終わったときのループ変数の値がちがったりして、
    けっこう苦労した > F社の依頼でつくったN->Fコンヴァーター
    (Lattice-Cで書きました。FM-16βか11の上のRED(よく異常終了する)で編集)

タイトルとURLをコピーしました