2023/10/21(土) [n年前の日記]
#2 [hsp] HSPの配列について勉強中
プログラミング言語 HSP の配列の仕様について確認中。
HSPにおける配列は、最初に何個必要になるか要素数を宣言しておかないといけないのだけど、その最大個数を超えて要素を追加できないものかなと。要は、動的に配列の要素数を変更していきたい。Python なら append() でそういうことができた気がする。Ruby なら push() だっただろうか。
環境は Windows10 x64 22H2 + HSP 3.6。
あちこちの解説記事を見ると、大きいインデックス値を指定すれば自動で配列がそこまで増える、という記述も見かけたのだけど。実際試してみるとエラーになる。
_array_add.hsp
やはり、最初に用意した要素数を超えて、要素を増やすことはできないようだなと…。
となると…。一度、仮で、十分に要素数が多い配列を用意して、そこに値を入れていって、必要な要素数が判明した時点で別の配列を確保して、必要な分だけ値をコピーする…。そんな感じの処理しか思いつかない。もっと上手い方法はないのだろうか。
HSPにおける配列は、最初に何個必要になるか要素数を宣言しておかないといけないのだけど、その最大個数を超えて要素を追加できないものかなと。要は、動的に配列の要素数を変更していきたい。Python なら append() でそういうことができた気がする。Ruby なら push() だっただろうか。
環境は Windows10 x64 22H2 + HSP 3.6。
あちこちの解説記事を見ると、大きいインデックス値を指定すれば自動で配列がそこまで増える、という記述も見かけたのだけど。実際試してみるとエラーになる。
_array_add.hsp
; 一度確保した配列に要素を追加できるか確認 ; 要素の追加は無理っぽい。エラーになる onkey goto *jobend dim a, 5, 4 repeat 5 a(cnt, 0) = cnt a(cnt, 1) = cnt a(cnt, 2) = cnt a(cnt, 3) = cnt loop ; エラーになる ; a(5, 0) = 5 repeat length(a) pos 4, cnt * 24 mes "a(" + cnt + ", 0)=" + a(cnt, 0) loop stop *jobend end
やはり、最初に用意した要素数を超えて、要素を増やすことはできないようだなと…。
となると…。一度、仮で、十分に要素数が多い配列を用意して、そこに値を入れていって、必要な要素数が判明した時点で別の配列を確保して、必要な分だけ値をコピーする…。そんな感じの処理しか思いつかない。もっと上手い方法はないのだろうか。
[ ツッコむ ]
以上です。