コミュニティアイコン プチコン 非公式コミュニティ プレイ日記

アバター
うょリウム(元 SPDX) ◆UTOEg1c1vr.B
2020/6/17 23:37
誰か教えてくださーい。

PUSHやUNSHIFTを使わずに
配列の要素数は変えられますか?

1次元配列です。
GSAVEやGLOADで使います。

コメント

アバター
こういち 2020/6/18 8:00 ◆ou0jbJnEJ0Kb
DEF RESIZE(N)
 DIM A[N]
 RETURN A
END
DIM A[0]
A=RESIZE(10)

みたいな。
元の値を保持したいときはDEFに配列ごと渡してボクの好きなCOPYを使うといい
アバター
りょうたんぽ 2020/6/18 12:35 ◆GoCg6EMf7SSc


DEF RESIZE S,N
 DIM D[N]
 COPY D,S
 COPY S,D
END
アバター
こういち 2020/6/18 13:37 ◆ou0jbJnEJ0Kb
りょうたんぽさん
DEF RESIZE(S,N)
 DIM D[N]
 COPY D,S,0,MIN(LEN(S),N)
 RETURN D
END
かな…
要素数省略すると自動で調整されたはず。
それはそうと、プチコン4ではRESIZEが標準装備されてるらしい。
アバター
りょうたんぽ 2020/6/18 14:31 ◆GoCg6EMf7SSc
自動拡張だけじゃなく自動縮小もされる、ということですか? なるほど……まだ勉強不足ですね……

プチコン4のRESIZEは

RESIZE ARRAY,SIZE0[,SIZE1[,SIZE2[,SIZE3]]]

という形で使えますよね。1次元では0も指定できたのでPOPのループせずに済みます。
(ただし多次元配列は SIZE0のみ変更可能 & 0 指定不可)
アバター
moh6an 2020/6/18 16:30 ◆6Z.AzgCiEzTT
MOHANでの話ですが
GLOAD/GSAVE用に極端に大きい領域を後から確保しようとすると
エラー終了してしまうことがあります(連続したメモリが確保できないことによるエラー)のでお気をつけを。
アバター
うょリウム(元 SPDX) 2020/6/18 23:51 ◆UTOEg1c1vr.B
ありがとうございました。
なるほどDEF内でのRETURNで変えられるとは…
しかしまわりくどいですね。
本当は二重定義してもエラーしない
仕様なら良かったんですけどね。
アバター
こういち 2020/6/19 13:09 ◆ou0jbJnEJ0Kb
りょうたんぽさん
縮小はされなかったはず。

mohさん
それは真理。連続した領域を確保しないといけないのは配列の欠点。その代わりパフォーマンスは良い。(プチコンの配列遅いけど)
アバター
うょリウム(元 SPDX) 2020/6/20 0:25 ◆UTOEg1c1vr.B
実を言うと要素数とか変更しなくても
解決してしまいました。
GSAVEした時と同じ範囲でGLOADすれば配列に余白があっても大丈夫という結論でした…
あーなぜこんな簡単なことに気がつかなかったのだー。

コメントを書く

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

- WEB PATIO -