2022年08月20日
川俣晶の縁側ヴィンテージ・パソコンtotal 1196 count

N-BASICのFOR-NEXTの研究・FORループを終了させずにGOTOで飛びだしても平気なのか?

Written By: 川俣 晶連絡先

 N-BASICのFOR-NEXTの挙動に良く分からない部分があったので、少し調べてみました。

 その結果分かったことは以下の通りです。

  • ループ変数の型はSNGとINTのみ。STRとDBLは使えない
  • ループ変数配列の要素は使えない
  • ループ変数は書き換えられる。同じループ変数のFOR文を別の行(マルチステートメント含む)で複数使っても問題ない(内部のFOR文が書き換えてしまった値が外のFOR文に影響するだけ)
  • 同じ行番号(マルチステートメント含む)のFOR文はメモリを追加消費しない (何回実行してもメモリ消費量は増えない。それまで実行したFOR文はキャンセルされる。なのでNEXTは1つのみで良い)
  • 異なる行番号のFOR文は同じループ変数名でもメモリを追加消費する (NEXTはFORに数だけ必要とされる)
  • 対応するNEXTのないFOR文は外側のNEXTで単純に無かったことにされる (i以下の注釈参照)
  • FORとNEXTの数は合っていなければならない、ということはない (FOR文がキャンセルされしまうケースがいくつかあり、それに対応するNEXTはなくても良い)

 【対応するNEXTのないFOR文は外側のNEXTで単純に無かったことにされる】についての注釈。

 これはFOR A=x to x:FOR B=x to x:NEXT Aとなっているとき、NEXT Aを実行する時にFOR B=x to xの情報はスタックから取り残されることを意味する。

FORループを終了させずにGOTOで飛びだしても平気なのか? §

 結論から言えばほぼ安全。

 FORループが消費するメモリは、特定行番号ごとに決まっているので、同じFORループを再度実行しても消費メモリは増えない。

 ただし、GOSUBとON ERROR GOTOについては、安全ではないことに注意。

 GOSUBは同じ行のGOSUBを何回も実行するとメモリを消費する。(再帰呼び出しができる、ということ)

 ON ERROR GOTOによるエラートラップは、ネストすることができない。エラーが発生した時点で更にエラーを起こすとトラップされないでプログラムは停止する。

望ましい中途脱出 §

 単に、FORループから出るだけなら自由に脱出して良い。

 それで致命的な問題が起きる可能性は低い。

 脱出先で、ダミーのFORループを実行してやると完了せずに残ったループのためのメモリはほぼ回収できる。ただし、FORスタックは回収できるが、ループ変数はクリアできないので、その分のメモリは消費されたまま残る。通常の単純変数をメモリから回収する手段はN-BASICの場合CLEAR文しかないので、CLEAR文が使えない状況では若干のメモリが残ることを諦める。

 しかし、GOSUBなどの他の状況が絡む場合は、CLEAR文で全てクリアした後でプログラムの先頭に戻ることが望ましい。もちろん、その場合はプログラムの状態は保存できない。

Facebook

キーワード【 川俣晶の縁側ヴィンテージ・パソコン
【ヴィンテージ・パソコン】の次のコンテンツ
2022年
08月
23日
SMC-777の1DDフロッピーディスクをSAMDISKで読み込むとエラーになる
3days 1 count
total 1144 count
【ヴィンテージ・パソコン】の前のコンテンツ
2022年
07月
26日
N-BASICで、PSETでキャラジェネの文字を表示する方法(POKE不使用)
3days 0 count
total 812 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

http://mag.autumn.org/tb.aspx/20220820171951
サイトの表紙【ヴィンテージ・パソコン】の表紙【ヴィンテージ・パソコン】のコンテンツ全リスト 【ヴィンテージ・パソコン】の入手全リスト 【ヴィンテージ・パソコン】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.