「なでしこv1」開発掲示板

なでしこv1のバグや要望を書き込む掲示板
[一覧へ] > (@781) [低] [未処理]
@781■ (#2456) 繰り返し処理の途中でのラベル設定 - 永世ヘボ (2015-10-20 13:12) /低 未処理
【症状】どのような症状、現象か?
繰り返し処理の途中に、「飛ぶ」命令の飛び先を設定するラベルを上手く入れられない。

【再現方法】サンプルソース、再現手順など
//次のサンプルソースでは、100回「あ」と言ってほしいが、
//実際は『「あ」という。』は繰り返し処理の外にあると解釈されるため、
//1回しか「あ」と言わない。
100回
    「ゴール」へ飛ぶ
▲ゴール
    「あ」という。

【要望】どのような解決が望ましいか?
たとえばサンプルソースの場合には100回「あ」と言うようにする。

【バージョン】確認したバージョン
1.553

(#2457) Re: 繰り返し処理の途中でのラベル設定 - うぇいく (2015-10-20 21:47) /低 未処理
そのソースの場合、戻ってしまうと、「飛ぶ」機能の意味がなくなります。
「100回」のループのインデントよりも浅いところに「▲ゴール」がある限り、戻ることはありません。
・飛ぶたびに飛んだ元に戻る必要がある場合、関数を使用してください。
・「▲ゴール」に飛んでも同じループが継続するなら、「▲ゴール」は、ループ内の他の要素と同じインデントにしてください(そして、「飛ぶ」以外で実行されては困るなら、その分が実行さえないように、もう1つ飛ぶを使うなりなんなりしてください)。この書き方でうまく飛ばない場合、飛ばないことがバグです。

なお、「飛ぶ」は、飛ぶはずのラベルに飛ばなかったりするので、利用しないことをお勧めします。大域脱出以外での利用は混乱のもとになるだけであり、大域脱出が必要な場合は、一応、例外を利用することで置き換えられると思われます。

(#2458) Re: 繰り返し処理の途中でのラベル設定 - 永世ヘボ (2015-10-20 23:11) /低 未処理
>うぇいく様
100回
    「ゴール」へ飛ぶ
    ▲ゴール  //ここでインデント
    「あ」という。

のコードも試してみましたが,この場合は1回目の「飛ぶ」命令のところでプログラムの動作が停止しました。ただこれはなでしこのバグによるものではなく,ユーザー定義命令やグループを宣言する時の●や■の先頭にインデントを付けるのは不適当なのと同じ理屈で,▲の先頭にインデントを付けるのも不適当だからだと解釈していました。

繰り返し処理中の指定した場所に飛ぶようにする事が必要な機会はかなり少ないと思いますが,気になったので一応掲示板で報告しておきました。

(#2459) Re: 繰り返し処理の途中でのラベル設定 - うぇいく (2015-10-21 09:10) /低 未処理
存在しない(「飛ぶ」命令の位置から見たときに、正しい飛び先となっていない場合も含む)ラベルに飛ぼうとすると、エラーも何も無くプログラムが終了します。
(適切なラベルを探すために、呼び出された順を遡ってラベルを探すのですが、見つからない場合、「プログラムを呼び出した(実行した)」ことを遡ったところで、プログラムが終了てしまう)

インデントの付いたラベルをラベルが正しく処理されないというのが根本的なバグなのですが、適切なラベルを見つけられなかった場合の動作が問題に拍車をかけている気がしてきました。ちょっと考えてみます。

(#2456)へ返信する:

👆お手数ですが、いたずら防止のために、「真夏」の読み方を記入してください。

編集時に使うキーを入力(省略可能)

画像ファイル(最大300KB)を添付可能