めざらさん >?{ #Y .. * }. * これを見たときから気になっていて、諦めの良い僕としては、このような書き 方する必要は、少なくとも僕には、ない、と結論したのですが。 ほんとうは諦め悪いのか、せっかくかなりしつこく引っかかったので、質問だ けはさせていただいてしまおうかと、まことに勝手ながら思いました。 何かコメントを頂ければ幸いです。 上は、 >?{ #Y .. * .} * これと同じ意味ですよね? なぜ、中カッコの外にピリオドを置くのか? そ して、しかし、どうも、誰もこれに関して、言葉にして疑問を呈したことがない みたいなのです。「誰も、ない」の部分は、自分のグレップ力にそれほど自信が あるわけではありませんが。 網羅的に調べたわけではありませんが、上村さんは、下の正統的なスタイルでした。 そりゃそうだろうと思いました。 === Macrotmp by B ===; * M 50 ^^ "Macrotmp" i=1, :A i++, (i==5)? . (i)>? {#d #s} >a>b>c . ;カーソル移動コマンドは無意味。ダミー。 :a &?("A") #m >A :b &?("B") #m >A :c &?("C") #m >A * 答え: A A A となる。 こんな性質を「利用」してるというか、面白がっているというか、というとこ ろなのだろう、と思ってます。古くは、N.Myaaさんが使われ始めたみたいでした。 カッコの外にだすと、「終わるぞ」と強調しているみたいに、見えなくはないけど……。 これは、無限ループの罠(ループカウンタが残ってしまう)とは別の事柄です よね。 * * のほうについては意味は分かっています。こちらも、わざわざそんなこと をする必要はないよ、と結論したのですが。
すいません、諦めると、見つかってしまうのですねぇ。 引用です。 -------------------------------------------------------------------------- Emmett氏, 95/8/27, <nifty:FGALPK/MES/15/1837> (a)>?{ . . . } &b (2) 0 1 2 3 4 5 この } が、 (0から数えて)3番目に位置する、独立したひとつの命令だと見 なされてしまうというところです。 多重分岐を実行する場合、VZは { の次か ら単純に、0、1、2と数えて行って、内部レジスタの値に相当する位置にある 命令を実行する…… のかと思うと、 それじゃぁ例えば a==5 の場合は &b をスッ飛ばして (2) だけ を実行するかと言うと、そうじゃない。a==4 以上の場合は a の値が幾つであろ うと、ちゃんと &b から実行します。 -------------------------------------------------------------------------- (ちょっと引用長すぎると感じてます。ごめんなさい。) 後半なんかは、上のマクロの挙動(AAA)と完全に一致する。 しかし、閉じカッコに当たっているのだ、と証明できるマクロのサンプルが 思いつかないのです。3,4,5,6,7 ....で、ビープなってしまいますよね。 そこに当たってるの? とただ、驚き。 どうやって3番目が &b でなく、} だと確認できるのでしょう? 3と4でヒット箇所(!)が違うから、違う挙動を示してくれるマクロって、書け ますかね? だって、3なら4をしちゃうのだもの。(逆に妄想ですが、これをc.mos さんは見切っていて、こんな仕様にした、とか。でも、m.gannさんは、そこに危険 を見た、、、。) Emmettさんを疑っているわけでは、まったくないのですが。 あらゆる状況証拠は、Emmettさんの書いていることを支持してはいるのですが。 もっと難しく、ソースからピンポイントにいうと、榊原さんの指摘、ということになる でしょうけれど。 結論は最初から分かっています。ふつうに>? {....}と、中に書けばいいじゃん、と。 でも、m.gannさんはぜったい偏愛してると思う。m.gannさんの、vzfl_g2.defとか さっき見ちゃった。16階、ish部屋でした。vzfl.defにFキーがいっぱい。なるほど。 しかし、[F01]は使ってない。まずのかなぁ。
一人相撲でごめんなさい。VzFAQネタに、どうぞ。 m.gann氏, 92/8/5, <nifty:FGALPK/MES/13/318> このあたりだ。本当に、}に当たる。そして、それは確率は低いとはいえ、 とんでもない現象を引き起こす可能性がある。 分かりました。多重分岐で、}に当てることのないよう気をつけます。 そんなところに当たっているとは、ゆめゆめ思わず、、、。 やっぱ無限ループと同根なんだ。>? {.....}とちゃんと数さえ間違えなきゃ、いいんですよね。 ま、怖いから。>? {....}.で、困らないときには、忘れなければ、こうします。いちおう報告。 mg..4=3, (3)>? {...} &m("%d",mg..4) mg..4=3, (4)>? {...} &m("%d",mg..4) なんてやってみたけど、分からず。もしかしたら、「Vzトークン覚え書」の 「 } 」で、もっと濃ゆい説明とかしちゃってもいいのかも、、、。 追伸:知ったかぶりをするつもりはまったくないのですが。 (3)>? {>a>b>c 単体だとエラーになり、 この下に別マクロであっても、} があれば、エラーにならなかったとき、}に 鍵がある、とは思ったんですよねぇ。もちろん、全部は消化できてません。 ただ、少し本気で納得した、という感じです。{}がお祈りとか、{ だけでいいとか 言われると、え、m.gannさんって、そんな審美的な感じであのコード書いてたの? とか思ってしまっていたもので。
過去ログの大きさ? どれくらいの量の情報だと思いますか。 答え、ものすごくアバウトに、文庫本80冊程度でした! m.gannさんのは、中身がわからずに2回ぐらい目にしたことがあった ような感触ですが、Emmettさん記事は、たぶん、本当に初めて。 いっぱい知らないことって、あるんでしょうね。 簡単にどう計算したか。>dir /s ;AP, PK, DCのログディレクトリで>Izgrep -i "LOG" ;xxx.logのみ。-- ignorecase>Izgrep -v "ディレクトリ" ;vzlogなんてディレクトリだったもので。;ゴミ削除。-- versaの意味かな。 ;awkが計算できないというので、byte -> KBへ、3桁カット(矩形ブロックマクロ)>Jgawk "{total+=$3} END {print total}";結果:19145 KB ;文庫本を原稿用紙300枚とし(厚め)、原稿用紙は400字==800 bytes ;インスタントマクロで、掛け算と割り算。19145/240=80 色々あると思うので、70冊から90冊のあいだのどこか、ぐらい? (ish部屋とかも入ってます。) ふう、それは読めんわ。 そして、Vzマクロの貴重な情報というのは、Vzのソースばかりか、 あの膨大なVzマクロ作品のコードにも入ってるんですよね。 榊原さんが言ってたとおり、* * のコメント機能は、コードが読めなくても 明らかなc.mosさんの意図と分かります。see macro.asm. やっぱ使うか。でも、ヘタに背伸びすると、無意味にバグらせそう。
メモ書きの独り言です。m(__)m ======= ゾンビ.DEF by m.xxxx =============================;伏字に意味ある? PK13 #00310 92/08/04 22:53 1 ^K^ で登録したあと、まず、 ^^ で92番のマクロを実行します。何度実行 しても「92番を実行しました」というメッセージが出ることを確認しておい て下さい。 2 次に、^\ で93番のマクロを実行し、何かのキーを押して終了させます。 何度繰り返しても、同じであることを確認しておいて下さい。 3 93番のマクロを終了させた状態で、ふたたび ^^ で92番のマクロを実行 します。 すると、どうでしょう。 ^^ で92番のマクロを実行したつもりでも実際に 実行されるのは93番ではありませんか!! *m 92 ^^ "" a-, :A (a)>?{ #26 #27 } (a++<16)? >A &m("92番を実行しました") &b(3) 93 ^\ "" i-, (-1){ &m("93番の実行中%4d%-32s何かのキーを押すと終了",i++,"") &b(3) &w(15) &k (r)? >B } :B &m("93番を終了しました") * ======= ゾンビ.DEF ======================================= メモです。何となくやってみようと思っただけです。それほど深く追いかけては いません。 上は再現しないと思う。>「(-1){」の「{」が生きたままマクロが終了しているということではないのかな?というのが、くらとさんの回答。 --- 長すぎる引用、ごめんなさい、ありがとうございます >m.gannさん 無限ループはもちろん、有限ループの場合も途中でループを脱出した場合は、 「ゾンビ」の要因が残されてしまいます。 ほとんどの場合は、それが顕在化せずに済むわけですが、低い確率で引き金が 引かれることがあります。「{」よりも「}」の方を先に実行してしまった場合が そうです。 ループカウンタが初期化されていない状態で「}」に出会うと、仕様通りルー プ開始ポインタへジャンプします。「}」はまさにジャンプコマンドなんですね。 蛇足ながら、ループ開始ポインタへ飛ぶ場合、そのマクロがたとえ上書きされ 消滅していてもそのアドレスへ飛び、あるいは飛び先でのマクロ・ラベルジャン プが不定となるなど、予想できない動作となる可能性があります。 引き金となるのは、多重分岐文でしかも(式)の値が限定的でなく、「}」へ ジャンプする可能性がある場合です。 --- (対策は記事の続きをどうぞ) 常識的には ・無限ループは {} で脱出。 ・多重分岐は数をきちんと数えよ でしょうけれど。 で、「再現しませんよね」で僕が思うのは、高橋さんが、「ループカウンタの 初期化」をするように「バグフィックス」(?)してくれたのではないかしら? 空想です。 じつは、 ; from ygear.def top (s)>?{ >A . >A >A . } . sに5はない。しかし「ゾンビ現象」で、} に実行ポインタが飛んでくる 可能性はなくはない(たぶん)。その場合にも、} のあとの「.」で止まる。 深慮というより習慣なんだろう、とか。 そんな安全策かなと想像していて。 高橋さんの何かで、ゾンビが完全に殲滅されたのだとは、僕は思っていません。 何しろゼロ戦Vzですから。 そして、 (r)>? {.. (a=2,b=3) (a=3,b=4) (a=4,b=5) ...} みたいには書けるのね、と発見。誰もやってないみたいなんですが(僕のvzdef ディレクトリ内)、大丈夫ですよね? この手のことは、ygrepの正規表現&特殊文字では、うまく指定できないの。 すぐGarbled commandとか言うし。 台風です。そろそろ都内で電車がいっぱい止まります。宮崎はどうなったでしょうか?
> >?{ #Y .. * }. *
> 上は、
> >?{ #Y .. * .} *
> これと同じ意味ですよね? なぜ、中カッコの外にピリオドを置くのか?
>5のときは結果も異なります.
>(このコードってどこから?)