読者です 読者をやめる 読者になる 読者になる

プチコンで遊ぼう! (はてなブログ版)

任天堂3DSのプチコンで遊ぼう! [twitter:@eida_s]

はてなダイアリーから移行しました。 はてなダイアリーのURLを開いても自動的にこちらにリダイレクトされますのでご了承ください。

DEFでハマったところ その2

プチコン3号

またまたDEFでちょっとハマりました。
今回のプチコン3号では、雰囲気的にDEFと配列関係はハマりポイントが多そうな気がしています。
自分が新たにハマったのは、OUT引数のところです。

自作命令を定義した時、OUT引数に変数を設定して自作命令からの値を受け取ることができます。
次のようなコードです。

J=1
FOR I=0 TO 10
 CMD I,J OUT J
NEXT
END

DEF CMD A,B OUT C
 ? A,B
 IF A<5 THEN
  C=B*2
 ENDIF
END

これは文法的には問題なさそうですが、実行時にエラーが発生します。

Type mismatch in 0:3 と出るので、3行目がおかしい、と言っているのですが、途中まで実行できているのになぜかこのエラーが発生します。

3行目がおかしいのでしょうか?

結論から言うと、DEF側の問題です。
DEFの定義中にOUT引数を返さないパスがある時、そのパスを通った時に上記のエラーが発生します。

エラー行が呼び出し元を指しているのでわかりづらいと思います。
メインルーチンにある処理を切り出して自作命令にした時にはまりそうですので覚えておくと時間をムダにせずに済むかもしれません。