HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0608
窓口二次元配列とクローン4解決


窓口

リンク

2009/6/8(Mon) 23:09:40|NO.25581

下のスクリプトでクローン変数を作ったのですが、うまくゆきません。
どうやら、二次元配列を「dup」すると、一次元配列に変換してしまうようです。
これは仕様なのでしょうか?

それとも、自分のパソコンが悪いのでしょうか?

<pra>
dim a,2,2
dim b,2,2

a(0,0) = 1
a(0,1) = 2
a(1,0) = 3
a(1,1) = 4


dup b , a

;mes strf("b(0,0)= %s : b(0,1)= %s : b(1,0)= %s : b(1,1)= %s",b(0,0) ,b(0,1) ,b(1,0) ,b(1,1))
mes strf("b(0)= %s : b(1)= %s : b(2)= %s : b(3)=%s " ,b(0) ,b(1) ,b(2) ,b(3) )
</pra>



この記事に返信する


SYAM

リンク

2009/6/8(Mon) 23:22:09|NO.25582

試してみたところ一次元配列になるのは確かですね。

現行のHSP3.1ではstrf関数に複数のパラメータが渡せないので…

dim a,2,2 dim b,2,2 a(0,0) = 1 a(1,0) = 2 a(0,1) = 3 a(1,1) = 4 dup b , a repeat 4 mes b(cnt) loop repeat 2:cntx=cnt repeat 2 mes b(cnt,cntx);ここでエラー. loop:loop
…のようにしました。



えく

リンク

2009/6/8(Mon) 23:47:57|NO.25584

今更のようですがどうやら配列変数のaが配列の先頭変数(今回の場合a(0, 0))のエイリアスになるので
メモリ的に展開されたあとの図を考えながらクローン作るしかないみたいです


dim a,2,2 dim b,2,2 a(0,0) = 1 a(1,0) = 2 a(0,1) = 3 a(1,1) = 4 dup b, a(1,0) repeat 3 mes b(cnt) loop dup b , a(0,1) repeat 2 mes b(cnt) loop

いずれにせよ配列のクローンというのは不可ってことですかね
あくまで変数に対してのクローンってことになってるみたいですし



窓口

リンク

2009/6/9(Tue) 21:58:01|NO.25597

>現行のHSP3.1ではstrf関数に複数のパラメータが渡せないので…


知りませんでした。
自分は現在バリバリ3.2使っています。
今のところかなり順調です。


>いずれにせよ配列のクローンというのは不可ってことですかね


一応、一次元配列なら、正常にクローンできているみたいですが。
何か、問題があるのでしょうか?



satto

リンク

2009/6/9(Tue) 22:20:35|NO.25599

dupは強制的に1次元配列になってしまうようなので、私は2次元配列の場合はマクロと併用して使ってますね

dim a, 2, 2
dup _b, a
w = length(a)
#define ctype b(%1,%2) _b(%1+%2*w)

a(0,0) = 1,2
a(0,1) = 3,4

for i, 0, 2
for j, 0, 2
mes b(j,i)
next
next



ONION software Copyright 1997-2023(c) All rights reserved.