IchigoJam BASICのFOR/NEXT
IchigoJamを試してみた。
このボードは電源ONでBASICが走るのだが、このBASICにはFOR/NEXTがない。この件について、作者の福野泰助氏がブログで「FOR NEXTが無い理由」を説明している。
かつてBASICでプログラミングした人はやはり多く、FOR/NEXTがない理由は気になるポイントのようです。代替が効くのでメモリを節約したいこともありますが、そもそも文法がわかりづらく、好みじゃないからです。
10 FOR I=0 TO 25
20 K=INKEY()
30 IF K<>ASC("A")+I GOTO 60
40 NEXT
50 PRINT "CLEAR!":GOTO 10
60 PRINT "GAVEOVER":GOTO 10こちらFOR文を使った、AからZまでの間違えずに押すゲームプログラムですが、実は落とし穴があります。キーを打ち間違えるたびに、NEXTを通ってループが終了しないまま、再度FOR文に入るのでスタックが溢れてしまいます(同じ変数ならスタックを消費しない手もありはしますが、さらに文法がややこしくなる・・・)。また、FOR文の後に書かれた代入文で使う変数が、TO文で暗黙に使われるところも気持ち悪く、増減分を変更刷るにはSTEP文というまた別の用語を使わないといけません。
らしい。まとめると
- メモリを節約したい
- BASICのFOR/NEXTがきらい
- FOR/NEXTループの中からGOTOでNEXTを飛び越えるとスタックがあふれる
- FOR文の後に書かれた代入文で使う変数が、TO文で暗黙に使われる
- 増減分を変更するにはSTEP文が必要
ということか。
いろいろFOR/NEXTのデメリットを挙げているのが、いずれも、作った側の事情だなあ。
好き嫌いを別にすると、GOTOでNEXTを飛び越えるとスタックがあふれるという問題は昔からあるようだ。
○ 8052AH-BASIC(BASIC-52)のFOR/NEXTもNEXTをGOTOで飛び越えるとエラーが出る。Intelの考え方はエラーが出てもFOR/NEXTはあった方が良いということか。
○ 豊四季TinyBASICの 電脳伝説 Vintagechips さんも「FOR~NEXTの課題」で検討されている。
○ ず@沖縄さんとメカAGさんがそれぞれのブログで昔のBASICの実装について書いておられる。
プログラムに始めて触れる子供を対象とするなら、ループ構造のないプログラミング言語を与えるデメリットの方がはるかに大きいと思う。
8Queen問題を解いてみた。
読み易く書いたらOut of memory になったので、最適化(^^;してみた。
ループは交差しているし(110~140、130~160)、そこらじゅうでRETURNしているし、いかにもBASICだ。初めてマイコンを買ったとき、こんなコードを書いてたよなあ...
>IchigoJam 0.9.7 by @taisukef |
↑と同じプログラムをFOR/NEXTを使って書くと↓だ。ずいぶんスッキリした。
|
ループが最後まで廻らない場合は、GOTOやGOSUBでNEXTを飛び越えないような工夫が必要だ。
と、作者のブログを見たら、「容量の壁と戦う IchigoJam FOR/NEXT 対応!(2015/03/29)」というエントリがある。var 0.9.8でFOR/NEXTに対応しているぢゃないか。
公式サイトの、下の方に IchigoJam ver 0.9.8-beta(開発途上版) のリンクがある。
- IchigoJam(2015/03/30)
- IchigoJam BASICのFOR/NEXT(2015/04/05)
- IchigoJam BASICのFOR/NEXT(2)(2015/04/07)
- IchigoJam(2) -IchigoJamそっくりさんを作る-(2015/05/17)
- IchigoJam(3) -超小型ARMマイコン基板-(2015/05/21)
- IchigoJam(4) -モリダンプ・プログラム-(2015/06/01)
- IchigoJam(5) -HDSP0670を使った4digit clock-(2015/09/24)
- IchigoJam(6) <4桁時計ダイナミック表示>(2015/10/13)
- IchigoJam(7) <OUT8~OUT11使用 4桁時計ダイナミック表示>(2015/10/19)
- IchigoJam,(8) <8x8LED>
- IchigoJam(9) <8x8LEDで8Qeen問題>(2015/11/10)
- IchigoJam(10) <8x8LEDを光センサーにする>(2015/11/17)
- IchigoJam(10) <LED&KEY>(2018/04/08)
- IchigoJam(11) <LED&KEYを機械語で>(2018/04/15)
« 諦める力 〈勝てないのは努力が足りないからじゃない〉 | トップページ | IchigoJam BASICのFOR/NEXT (2) »
「CPUボード」カテゴリの記事
- 久々の物欲(2022.05.21)
- stcgal <質問に答える>(2021.02.21)
- micro:bitで跳び上がると表示する名札 <ウケ狙い>(2020.11.18)
- micro:bit <BLEが乗った低価格マイコンボード>(2020.09.15)
- Google日本語モールス入力(2020.05.01)
「IchigoJam」カテゴリの記事
- IchigoJam(11) <LED&KEYを機械語で>(2018.04.15)
- IchigoJam(10) <LED&KEY>(2018.04.08)
- IchigoJam(10) <8x8LEDを光センサーにする>(2015.11.17)
- IchigoJam(9) <8x8LEDで8Qeen問題>(2015.11.10)
- IchigoJam(8) <8x8LED>(2015.11.04)
「プログラミング」カテゴリの記事
- GMC-4で動く3連ナイトライダー(2022.12.30)
- プログラミング言語ランキング(2022.11.19)
- AWSでサービス構築(2022.05.29)
- Excelの配列式(2022.01.06)
- ローコード・プログラミング(2021.11.07)
« 諦める力 〈勝てないのは努力が足りないからじゃない〉 | トップページ | IchigoJam BASICのFOR/NEXT (2) »
コメント