コミュニティアイコン プチコン 非公式コミュニティ トピック

アバター
ホラムーン ◆uyXAks2Ee1EU
2018/10/16 18:39
質問
GOSUBで文字列変数を使う時に
SLOT指定はできますか?
GOSUB 0:x$ としてもIllegeal function callが出たので……。

コメント

アバター
あまさとしおん 2018/10/16 18:46 ◆mzDKTVUAtwqE
ヒント:ラベルは文字列にもなる
アバター
ホラムーン 2018/10/16 18:49 ◆uyXAks2Ee1EU
GOSUB "0:x$"
としてもエラーになったんですよね……
アバター
ホラムーン 2018/10/16 18:52 ◆uyXAks2Ee1EU
DEF内でDEF外にGOTOするにはGOSUBが必要なので、

USE 0:GOSUB "0:RAVEL$"

としているんですが……。
アバター
はる 2018/10/16 18:53 ◆75Vh4SY8TdKS
普通に使えます。

GOSUB "0:"+X$
USE 0:GOSUB "0:"+RAVEL$
アバター
あまさとしおん 2018/10/16 19:16 ◆mzDKTVUAtwqE
ああー
変数を括っちゃうパターンにハマッてしまったのね

文字列を""で囲うのは「リテラル」(簡単に言うと『みたまんま』)部分だけなので、変数を囲っちゃダメで
文字列を連結するために+が必要なので
はるさんのように書く必要がありますね
アバター
しんいち 2018/10/16 20:45 ◆lHy.hAWXbthn
DEF内からDEF外に飛び出すにはスロット指定が必要で、それはGOTOもGOSUBも一緒。DEF内でDEF内のラベルにGOTOは普通にできる(スロット指定不要)けど、GOSUBはできない。

DEF内でサブルーチンを呼びたい場合、DEFもう1つとか、スロット指定でGOSUBとか考えられるけど、ちょっと大袈裟。と思った私は、DEF内GOTOで行って/戻ってを繰り返したりします。

DEF A(N)
 VAR RT$
 RT$=@0:GOTO@SUB:@0
 RETURN N
 @SUB
  N=N+1
 GOTO RT$
END

但し、ラベル乱発する羽目になったりします。
因みにラベルは"で括らなくても文字列として扱われるみたいです。
アバター
Ryou Tanpo 2018/10/17 20:40 ◆AI5iRr9FjmkJ
DEF 外に GOTO/GOSUB する必要があるという構造そのものを見直した方がいいかもとも思うのですが、具体的にどんなプログラムですか?
アバター
Ryou Tanpo 2018/10/17 20:41 ◆AI5iRr9FjmkJ
あと、DEF 外に GOTO するには GOSUB が必要というのはどういうことだろう??
アバター
たんじぇ 2018/10/19 10:31 ◆WDmFkVwZ4yMl
BASICってあんまり型を気にしなくても良い言語だけど、文字列か数値かは気にしないといけないのです。

GOSUB にはラベルか文字列を渡すことが出来て、今回のパターンはGOSUBに文字列を渡したい。
文字列が渡れば良いので GOSUB の引数には文字列加工しようが文字列変数を渡そうが直接文字をかいても通ります。

ただ、GOSUB は戻ってこれるラベルに飛ぶ命令で、プログラム中にラベルが存在しない場合はエラーとなります。

GOSUB 0:X$ の場合は、引数が文字列になっていないため呼び出しエラー(引数が0だけと解釈されて、: で次の X$ が実行はされていないけど文法エラーとなる)
GOSUB "0:LABEL$" の場合は"0:LABEL$"というラベルが存在してないためのエラー

GOSUBには存在するラベル名の文字列を渡せば良いので、引数の部分の文字列加工が正しく"0:@SONZAISURU_LABEL" と加工できればよく、方法としては
"0:"+LABEL$ とするか、 FORMAT$("0:%S",LABEL$) とするか、いったん文字列変数に代入しておいて L$="0:"+LABEL$ : GOSUB L$ のようにします。


illegal function call は引数の型や数が違う場合に出るので、その場合に本当にその引数の型(数値か配列か文字列)や渡した値(文字列加工結果)が正しいかを気にしていくと良いです。

コメントを書く

  • こちらは「プチコン3号」「プチコンBIG」など、プチコンシリーズに関する話題を扱ったコミュニティです
  • プチコンシリーズにまったく関係ない書き込みはご遠慮下さい。削除の対象となります
  • こちらにはその他のゲームや雑談のコミュニティはなく、作る予定もありません (ひとりで管理できないため)。ごめんなさい
  • ユーザー登録なしで書き込みができます
  • 秘密の合い言葉は成りすましの防止 (トリップ機能)、書き込みの編集時の本人認証に使用します
  • 秘密の合い言葉に他人に推測されやすい言葉、他サービスと同じパスワードは入力しないでください。
  • 書き込むと、投稿時に入力したお名前と秘密の暗号が記憶され、ログイン状態になります

- WEB PATIO -