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

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

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

TIPS:配列をリストのように使う

プチコン3号では、配列にPUSH、POP、SHIFT、UNSHIFTなどの命令が追加され、これらを使うと配列を一次元リスト(以下リスト)のように扱うことができます。
素数を気にせずに使うことができますので、要素数が不定の場合にはこの使い方がおすすめです。

以下に使い方をまとめておきます。

●配列の宣言
配列は要素0個の配列として宣言してしまいます。

DIM A$[0]

●配列の要素を追加する
PUSHで配列の最後に要素を追加します。

PUSH A$,"プチコン3ごう"
PUSH A$,"では"
PUSH A$,"はいれつを"
PUSH A$,"あつかえます"

●配列を自作関数(命令)に渡す
引数に[]なしで変数名を書くと、自作関数(または命令)に配列全体を渡すことができます。
逆にOUT句以降の変数には渡すことができないので注意が必要です。

LPRINT A$

DEF LPRINT _L$[]
 VAR _I
 FOR _I=0 TO LEN(_L$)-1
  ? _L$[_I]
 NEXT
END

●要素をクリアする
素数を0個の状態に戻すには、要素数の回数だけPOPします。

WHILE LEN(A$)
 Z$=POP(A$)
WEND

●途中に要素を挿入したり、削除したりする
直接該当する命令はないので、COPYをうまく使って当該の処理を実装します。
下記をご覧ください。


上記をまとめたプログラムは以下のとおりです。

'配列の宣言
DIM A$[0],B$[0],C$[0]

'要素を追加する
PUSH A$,"プチコン3ごう"
PUSH A$,"では"
PUSH A$,"はいれつを"
PUSH A$,"あつかえます"
LPRINT A$
?

'要素を挿入する
INS=2
COPY B$,0,A$,0,INS
PUSH B$,"リストのように"
COPY B$,LEN(B$),A$,INS,LEN(A$)-INS
LPRINT B$
?

'要素を削除する
DEL=3
COPY C$,0,B$,0,DEL
COPY C$,LEN(C$),B$,DEL+1,LEN(B$)-DEL-1
LPRINT C$
?

'配列の要素の数を0にする
WHILE LEN(B$)
 Z$=POP$(B$)
WEND
PUSH B$,"いじょうです"
PUSH B$,"ありがとうございました"
LPRINT B$
END

'文字列配列の要素をPRINT
DEF LPRINT _L$[]
 VAR _I
 FOR _I=0 TO LEN(_L$)-1
  ? _L$[_I]
 NEXT
END

配列をリストっぽく使う実例としては、私の「スマイルボタンに登録して使うセーブ/ロードツール」
(http://d.hatena.ne.jp/eidaht/20141205/1417797702)
の中でメニュー表示に使っています。

あと、挿入と削除を自作関数(または命令)にするといい感じかもしれないです。

いろいろと活用してみてください。