トピック
だにえる haru2016nen

第三章/立ちはだかる参照と       賛賞される山椒魚!

参照について教えてケロ。 「扱いが難しくてバグのように 扱われている'仕様'」だと 思ってるケロ。 文字列操作する時に一度遭遇して、 その時はCOPYでその場を やり過ごしたんだけど、、、 配列の場合はどうしたらいいケロ? とりあえず打開策を 知れればいいんだけど、参照を 有効活用するようなプログラムが あれば、それも教えてほしいケロ。
11そうだね
プレイ済み
返信[1]
親投稿
配列も基本COPYで大丈夫だと思います。 参照を有効活用するプログラムと言えばソートとかですね。画面写真は遅いことで知られているスローソートです。そもそもプチコンには標準でソートが用意されていますが。
2そうだね
プレイ済み
返信[2]
親投稿
だにえる haru2016nen
う~ん…。 テスト用のプログラムだと COPYでいけたんですけど、、 実際に利用するプログラムだと COPYでも変わらない…。 うむむ。
0そうだね
プレイ済み
返信[3]
親投稿
MIKI ifconfig
連番がふられたロッカーがたくさん並んでいる。 プチコンの配列はこのロッカーの一部を使えるものです。 var a[8], b[8] という文を実行すると、 a という変数には例えばロッカー番号1000が設定される。 ロッカー1000番から1007番までが配列aとして使えるってことね。 b には続く1008番が設定され、配列bは1008番から1015番まで使える。 ここで a=b という命令を実行すると、aは1008番になる。 配列aもbも同じロッカーを共用するってことね。 def へ引数として渡す場合も、仮引数に対してこの代入と同じことが起きます。 もし a=b ではなく copy a,b を使えば、aは1000番のまま、配列bの内容が1000番~1007番にコピーされます。
2そうだね
プレイ済み
返信[4]
親投稿
MIKI ifconfig
山椒の有効活用方法としては、焼き魚・唐揚げ・麺類などに適量ふりかけると、大変良い香りが楽しめます。 ・・・ではなくて、 例えばテキストファイル全体を文字列として読んで、一行ずつ処理したい場合、 def gets(s$) が、 - 戻り値としては s$ の最初の1行を返し、 - かつ引数の s$ からは最初の1行がなくなると ↓こんな感じで便利に使えるのよね。 test$=load("txt:foo",0) repeat line$=gets(s$) ' 一行の処理 until line$=="" '全部処理した
3そうだね
プレイ済み
返信[5]
親投稿
だにえる haru2016nen
なるほど。 参照の動きは分かりました。 けど、、、んー、 なんかSORT,RSORTの時に 参照されてるみたいです。
1そうだね
プレイ済み
返信[6]
親投稿
MIKI ifconfig
配列の場合、組み込み関数・命令であっても、引数として渡すのは参照ですよ。 sort a で sort に渡されるのは「ロッカー番号1000番」という値。 配列全体をコピーして sort に渡すわけではありません。 > SORT,RSORTの時に参照されてるみたい だにえるさんの期待と異なる動きをするってことですね? 理想の動作: 現実の動作: このあたりを詳しく説明してもらえるといいかもしれない
4そうだね
プレイ済み
返信[7]
親投稿
すき屋の うな牛(うなぎ+牛丼) の小分けの山椒パックに2つ付けられて1つ余ってどうしような今日この頃。 配列変数を [] なしで使うと参照になって、動作はMIKIさんの説明のとおり。 写真のコードだと 10行目の A%=B% で 3行目の READ A%,@D で読み込まれたデータはプログラム中からは誰もさわれない状態になっていて 11行目の RSORT でB%の参照先の配列がソートされて、同じアドレス(MIKIさんの説明のロッカー番号)の A%もソートされたように見えちゃっているという。 テストプログラムで動いて実際のプログラムで動かないのは、たぶんどこかで参照指定がまちがってる感じがします。
3そうだね
プレイ済み
返信[8]
親投稿
参照が使われる理由としては、配列1000個を関数引数などにわたされたら、1000個も関数の仮引数にコピーしなくちゃいけなくて大変なので、 配列1000個の先頭のアドレス(と配列個数の2個)だけ渡せばそこから1000個処理しても同じ事出来るので、ならば配列の方がデータ渡すの少なくて動作早くなる、という感じです。 文字列も文字の配列なのでだいたい同じ仕組みなのです。
4そうだね
プレイ済み
返信[9]
親投稿
だにえる haru2016nen
解決しました! ありがとうございます。 何をやりたかったかと言うと、 最近僕が作ってるアレ(投稿参照)で 描画する文字を反転させたかった んですよねー。
1そうだね
プレイ済み
返信[10]
親投稿
だにえる haru2016nen
これがテスト用のプログラムです。 23・25行目のSORTやCOPYの箇所で 参照されてると勘違いしていたんですが、 13行目で=を使っていたことが 原因でしたケロ。
1そうだね
プレイ済み