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


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0101
玄冬モジュール型変数内の配列を1度のループでコピーする方法2解決


玄冬

リンク

2014/1/1(Wed) 22:33:24|NO.59071


#module mod M #modinit dim M, 3 : M =1,2,3 return #modfunc f_mes;表示する mes "" + M(0) + ":" + M(1) + ":" + M(2) return #modfunc f_x2;倍にする repeat 3 M(cnt) *= 2 loop return #global newmod A, mod newmod B, mod f_mes A ;Aを表示 f_mes B ;Bを表示 mes ;改行 f_x2 A ;Aを2倍 f_mes A ;Aを表示 f_mes B ;Bを表示 mes ;改行 B = A ;BにAを代入※ f_mes A ;Aを表示 f_mes B ;Bを表示 mes ;改行 f_x2 B ;Bを2倍 f_mes A ;Aを表示 f_mes B ;Bを表示

現在モジュール型変数の使い方を勉強中です。
上のスクリプトを実行すると
下記のような出力結果になるのですが、
下から2行目が「2:4:8」になるようにしたいです。
(Mの内容をAからBへ値渡しで代入したいと言えばいいんでしょうか…)

1:2:3 1:2:3 2:4:8 1:2:3 2:4:8 2:4:8 4:8:12 ←ここが2:4:8になるようにしたい 4:8:12

スクリプトの※印の代入B=Aがアドレス渡しに
なっているからだと考えられるので
foreach M
BのM(cnt)=AのM(cnt) loop
となる命令を作ればよいだろうと思ったのですが

#modfunc f_set array p_LIST foreach M p_LIST(cnt) = M(cnt) loop return #modfunc f_copy array p_LIST foreach M M(cnt) = p_LIST(cnt) loop return f_set A, C f_copy B, C
↑のようにループを2回繰り返す方法しか思い付きませんでした。
1度のループでこのようなことができる方法はないでしょうか?
ご回答よろしくお願い致します。



この記事に返信する


掘木

リンク

2014/1/1(Wed) 23:10:27|NO.59073

memcpyならループ不要というのはさすがに野暮な言いようだろうか。

dupやdupptrならどうだろうか。

#modfunc local f_datadup array ret_var dup ret_var,M return #modfunc f_arraycopy var modM,local dupM f_datadup@mod modM,dupM dim M foreach dupM M(cnt) = dupM(cnt) loop return

f_arraycopy B,A // BにAの中身を代入



玄冬

リンク

2014/1/1(Wed) 23:33:12|NO.59074

>掘木さま
ご回答ありがとうございます。

全然野暮じゃないです。
memcpyもよく知らないなりに考えたんですが…
memcpy B,A,48

として駄目だったので、思考から外していました。 そうですよね。modfunc内でMに対して使えば良いだけの話ですね 参考スクリプトとコメントでなんとなく dupやmemcpyへの苦手意識が薄れた気がします。 だいぶ高速化できそうです。ありがとうございました



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