トピック
HMF gunsofthemy

USE の使い方

説明によれば、「指定したスロットのプログラムを実行可能にする」とありますが、どういうことか分かりません。意味か使い方を教えていただければ有難いです。
4そうだね
プレイ済み
返信[1]
親投稿
HMF gunsofthemy
@NEXT はSLOT1にあります。てっきりUSEでSLOTを超えてジャンプできるのかと思ってましたが・・・。
0そうだね
プレイ済み
返信[2]
親投稿
だにえる haru2016nen
スロットを越えるGOは GOTO"1:@SLOT1_A" みたいにスロットを指定する必要がある。 (GOSUBも同様) で、このときに あらかじめUSE(もしくはEXEC)を しておかないとエラるっていうこと。
2そうだね
プレイ済み
返信[3]
親投稿
だにえる haru2016nen
ちなみに、DEFの場合。 あらかじめUSE(EXEC)しておいて、 COMMONを付けておけば スロット指定は必要ないっていう。
2そうだね
プレイ済み
返信[4]
親投稿
おちゃめ ochame_nako
プチコン3号は実行時にプログラムを「プチコン3号が実行できる形式(中間コード)」に変換します。 これは普段(RUNで実行時)は特に使用者が気にする必要はなく自動的に行われていますが、この変換処理を意図的に行うのがUSE命令の役割です。 GOTO、GOSUBで別スロットにジャンプするときにはUSEが必要になりますが、EXECを使い別スロットの先頭行から実行する場合にはRUNと同じく変換処理が自動的に行われるためUSEは不要です。 USEを実行することでラベル(ジャンプ先)がどこにあるのかという情報が取得可能になるわけです。 また、ジャンプはしないけど別スロットの変数を使いたいという場合もUSEは必要になります。(変数は各スロットで別物扱い)
3そうだね
プレイ済み
返信[5]
親投稿
おちゃめ ochame_nako
ちなみにUSE 1でプログラムスロット1が使用可能になります。 スロット1に@NEXTというラベルがあるならばGOTO "1:@NEXT"でジャンプできます。 USE 1 GOTO "1:@NEXT"
1そうだね
プレイ済み
返信[6]
親投稿
SEKI22 rcftgrsfrr578
『中間コードに変換』は『コンパイル』や『アセンブリ』とも言う。
1そうだね
プレイ済み
返信[7]
親投稿
SEKI22 rcftgrsfrr578
↑アセンブリはマシン語でしたw
0そうだね
プレイ済み
返信[8]
親投稿
MIKI ifconfig
use は予期せぬバグの元なので、exec を使いましょう。 run = コンパイル + 実行 use = コンパイルのみ exec = コンパイル + 実行
1そうだね
プレイ済み
返信[9]
親投稿
HMF gunsofthemy
なるほど、USEってそう使うんだ。 で、推奨されてたEXECの説明を見てみると・・・あっコッチの方が有能ですわ てなりましたのでEXECを使わせていただきます。ありがとうございました。
0そうだね
プレイ済み
返信[10]
親投稿
MIKI ifconfig
バグの元ってのは --- slot 0 --- use 1 f --- slot 1 --- var v[8] ' slot 1 内でのグローバル配列(のつもり) common def f ? v[0] ' 配列の要素を参照してみる end --- これで run すると ? v[0] が type mismatch になります。 ∵コンパイル時には var v[8] の行は v というシンボルを登録するだけで、vはまだ配列にはなっていないからです。 この行を「実行する」ことによって、初めて v は配列になります。 use はコンパイルだけして実行はしないのでこのようになります。exec は実行もするので、期待通りに動きます。
2そうだね
プレイ済み
返信[11]
親投稿
HMF gunsofthemy
おちゃめ さんの変数についての発言が気になるのですが、どうやったらそんな事が出来るんでしょうか・・・?
1そうだね
プレイ済み
返信[12]
親投稿
MIKI ifconfig
別スロットの変数は今ちょうど別トピで話題になってますが、var("1:変数")でアクセスできます。 が、exec または use してないとコンパイルされないので、そもそも使えないってことでしょう。 prgset などで編集した場合も、exec/use しなければそのスロットのプログラムは一切使用できません。 例 (slot 0) prgedit 1 prgdel -1 prgset "var a" ' exec 1 ' ここで slot 1 をコンパイルする ? var("1:a") ' exec してなければエラー、execすれば 0 表示
0そうだね
プレイ済み
返信[13]
親投稿
HMF gunsofthemy
syntax erorr (?)とか吐かれたんですが・・・。SLOT1にはA=1がありまふ。
0そうだね
プレイ済み
返信[14]
親投稿
だにえる haru2016nen
PRINTが抜けてる…?
0そうだね
プレイ済み
返信[15]
親投稿
HMF gunsofthemy
えぇ・・・。 VARって 変数2=VQR(変数1) って使い方が出来るんですね。え? コレお前が思い付いたわけじゃないだろって? ハハーマサカソンナコトガアルワケガ・・・うん、実際あったので非公式マニュアル見てきましたすいません。
0そうだね
プレイ済み
返信[16]
親投稿
おちゃめ ochame_nako
VAR("プログラムスロット番号:変数名")とすると好きなプログラムスロットのグローバル変数を取得可能ですが、そのためには変数が実体化されてなければなりません。 したがって、EXECを使ってそのプログラムスロットの先頭行から必要な部分までを実行させるか、USE+GOTO(もしくはGOSUB)を使ってその変数の宣言もしくは使用されている行を実行させる必要があるわけです。 これらについて詳しくは「プチコン3号入門講座」に掲載しています。 ぜひ読んでVARをバリバリ使いこなせるようになってください。
0そうだね
プレイ済み
返信[17]
親投稿
HMF gunsofthemy
おちゃめ さん» なるほど、よく分かりました。にしてもVARって変数宣言だけが仕事じゃなかったのか。なかなか有能ですね。
0そうだね
プレイ済み
返信[18]
親投稿
HMF gunsofthemy
別件ができたので閉じます。皆様、ありがとうございました。
0そうだね
プレイ済み