再帰でできるものは必ずループでもできるらしい。再帰からループへコードを変更するための題材にも使われるらしい。23年前に実際にマクロコードを書いていたのですね。ループならどうということもないのですが。8ビットパソコンの時代のBASICでは、再帰というものが使えませんでした。気取ったプログラマたちの力試しの例題に使われていたりして。ま、再帰が使えない、という意味ではVzのマクロも同様。この再帰というのが私はいまいち理解できていなくて。言えば、サブルーチンの中でそのルーチンの先頭に飛んで条件を満たすまで繰り返す。みたいな感じでいいのかしら。実際VZマクロでもそういう動作をしているように思いました。しきさんのコード、わかりやすそうですね。いつか使わせてもらうかもしれません。したら、$mxの初期化って、それほど重要ではないかもしれない。少なくとも、allreadのほうでは初期化してあったような。それに、初期化しておいて害になることもないし。変数の初期化は最近の速いCPUでは特に必要かもしれませんね。初期化してないせいでタイミングが狂い挙動がおかしくなることもありそうで。見たらタイトルが微妙に違う。内容の紹介を見て、読んでみたくなりました。それでは、ちょっと一休みして。つぎはいよいよ、konnoさんご希望の、掲示板検索ルーチンに取り掛かってみますか。いつ開始するか全くめどは立っていませんが。おお、期待しています。(^_^)ログ形式が同じならそのまま動くのではないかと思っています。どんなチェック漏れがあるやら、想像もつきません。いやぁ、やっぱりまだ何かおかしいですね。#11097とか#11098からのツリーの、本来「┗」でなければいけないところがいくつか「┣」になっていますね。OKなところとNGなところの条件から追いかけてみましょう。いえ、今日はもう終わり。「┣」になっていますね。見てみましたが、これは正しいツリーだと私は思います。うちのツリーは横幅を狭くしたくて見た目がいまいちなのです。見てみましたが、これは正しいツリーだと私は思います。あれ?うちとkonnoさんのところでは、表示のされ方が違うのかな?そんなことはないと思うけど。#11097から始まるツリーの#11117とか#11126が、本来は「┗」でなければいけないけれど「┣」になっているように見えます。これ、konnoさんのところでは正しく「┗」になっているのか。それとも私の勘違いで「┣」が正しいのか。いけないけれど「┣」になっているように見えます。あうう、リンク先をそのまま見ていました。頭が他に行っていたみたいです。ツリーは「┣」になっていますね。m(__)m何が悪いのかはわかりません。何が悪いのかはわかりません。私にも何が悪いのか、今のところは全くわかっていません。一応、1月にkonnoさんにお送りしたコードを再び引っ張り出してみました。うちの板塀の現行ログを表示してみたのですが、全て正常な表示に見えるのですよ。複雑そうなツリーであっても。う〜ん、まさかデータというかログファイルのほうに原因があるのか?それとも、私がkonnoさん的なコードに転記する際にどこかを誤ったとか。複雑というか統一性に欠けたコーディングスタイルでしたから。konnoさんがご自分でコードをきれいにしようとして失敗したとか。一応、ざっくりみたところ。msgviewの中で「┗」「┣」が表示されるルーチンは以下のような感じ。}}一方で、正しく表示される一括表示のツリー表示部分は以下のような感じ。}}条件式が違うじゃない。何でこんなところを見落としたんだろう。テストデータというか板塀のデータで正常に表示されていたからだろうなぁ。いうことで、もしかしたらこれでうまくいくかも。konnoさんのところでも不要なコメントは全部落としているでしょうから、場所はすぐに見つかることでしょう。konnoさんがご自分でコードをきれいにしようとして失敗したとか。私は頂いたソースをそのまま張り付けただけだったと思います。(^^;今見たら私のバグバグなトンでもコードのコメントがそのまま大量に残っていますね。(^^;よくこの状態で修正できたと感心します。いや、ありがたいです。msgviewの中で「┗」「┣」が表示されるルーチンは以下のような感じ。ここは探してみたところ、以下のようになっていましたが修正しました。}最初下の1行だけ修正しましたが変わりませんでした。それで上側も修正したら、キチンとツリー表示出来ました。見つかることでしょう。不要なコメントはまだそのままですが、これを機に削除しようと思います。(^^;本当にありがとうございました。それで上側も修正したら、キチンとツリー表示出来ました。ヤッタ-無事に正常表示になりましたね。今見たら私のバグバグなトンでもコードのコメントがそのまま大量に残っていますね。この状態で修正できたと感心します。いや、ありがたいです。前にも言ったけど、ほとんど迷彩のような。プログラムからバグを除去することを拒むかのような。このコードを書いた人は、プログラムの完成を見ることなく、永遠にデバッグのぬるま湯に浸かっていたいのか。誤解してしまいそうなわけですよ。誤解ですよね?#本心だったらいやすぎコメントが多いというのは、決して悪くはないんですよ。問題は、それが何を意味しているかがわからないこと。○○氏のコード」などときちんと記載されていればいいのですよ。ymfcstなんかでも採用されているような感じで「★マークの5行のコメントをはずすとほにゃらら」みたいなものとか。要は、konnoさんのコードの場合、有効な情報が全くないのがイマイチ。人間に対して意味のない情報は少ないほうがいい。私も、プロの書いたコードなんてあんまり見たことがありませんが、まずは目標としてコードだけで、つまりコメント全くなしで、ここは何をやっているかがわかるようなものを目指すらしい。すれば、そもそもコメントを入れなくてすむから。おおむね、人はみな横着ですからね。コメントを考える手間も省きたいわけですよ。そんなものが実現することはまずない。いうことで、次善の策。コメントだけを追いかけることで、そのコードが何をやっているかがわかるようにする。それなりにプログラムを読んできた経験のある人の場合、初めて触れる言語であっても、コメントのあるコードであれば、まずコメントを読む。私も、Vzのマクロを勉強するとき、ikubohさんだったかな、もう忘れましたが、誰かのマクロコードのコメントを見て勉強した記憶があります。いうことで、必要なコメントはバシバシ入れましょう、ということでした。誤解してしまいそうなわけですよ。#本心だったらいやすぎもちろん誤解ですよ。世の中変人が多いのでそういう人もいるかも。コメントが多いというのは、決して悪くはないんですよ。問題は、それが何を意味しているかがわからないこと。超絶ハイテク技などはそういうコメントが欲しいものですね。要は、konnoさんのコードの場合、有効な情報が全くないのがイマイチ。コードのことを言っているのですよね。アセンブラやVZマクロにはかなりコメントを入れているつもりです。いうことで、次善の策。いるかがわかるようにする。これは上で書きましたが、BASICは自分で読めるものだからあまりコメントを入れないのですね。後で読むと何をやっているのかわからなくなってしまっています。(>_<)ということで、今はサブルーチンのタイトルや説明、各行のコメントをなるべく入れるようにやっている最中です。(^^;達人のコードにコメントが無いのは必要を感じないからなんでしょうね。マクロコードのコメントを見て勉強した記憶があります。いうことで、必要なコメントはバシバシ入れましょう、ということでした。ikubohさんなど達人のマクロはコメントがないと何をやっているのか全く分からないレベルですからね。私もこれからは他人が読むことを念頭に入れてコメントを入れるようにします。昨日の自分は他人と言いますからね。要は、konnoさんのコードの場合、有効な情報が全くないのがイマイチ。コードのことを言っているのですよね。BASICもそうですが、先日お送りいただいたperlのコードも含めて、です。入れるようにやっている最中です。(^^;うん、まぁ、最終的な完成品を作るにあたってそういうことは必要ですけどね。私のような横着な人間はどうするかというと、プログラムを作る前に、日本語で設計します。その設計をそのままコードの中にコメントとして残しておく。今回のkonnoさんのprime2.basを作ろうとするなら、私の書きそうな設計は以下のような感じ。求める素数上限入力メインルーチン(サンプルコードを最大限流用)終了処理(キー入力待ち必須)出力サブルーチンファイル出力エラー終了ルーチン(自作の××からコピペ)タイマールーチン(自作の○○からコピペ)こんな感じで設計ができたら、あとは切った貼った、コピペできないところは仕方ない作るか。いう風にするわけです。すれば、わざわざコメントを書くということはなくなります。その上、設計をじっと見つめて、例えば、出力部分はもうちょっと整理できそうだ、とか、エラーのルーチンはそのままコピペだとイマイチかも、みたいなことも考え付いたりするわけですよ。いえば昔、どこかに似たようなことも書いた気が、と思って検索したら。nifty:FGALDC/MES/15/#19030に似たようなことを書いていた。ikubohさんではなくてEmmettさんのマクロで勉強したのか。いろいろなことを書きましたが。結論は、楽をしましょうよ、ということに尽きるわけで。BASICもそうですが、先日お送りいただいたperlのコードも含めて、です。ことを忘れていました。その設計をそのままコードの中にコメントとして残しておく。これをそのまま各ルーチンのタイトルに使うのですね。今すぐこのスタイルに切り替えるのは難しそうです。(^^;でも参考になりました。やってみたいと思います。いえば昔、どこかに似たようなことも書いた気が、と思って検索したら。似たようなことを書いていた。ikubohさんではなくてEmmettさんのマクロで勉強したのか。Emmettさんを思い出してました。僕は、マクロを書く時はとりあえずグローバルマクロからとにかく書き始めます。組んで行くということはやったことがありません。バルの1行目から、じかに書き始めます。さんのマクロ作法がわかったような気がします。さんとほとんど変わりません。いうか、まぁ日本語のようなもので書いているのです。マクロに翻訳する、と。スタイルが違うと感じます。(^^;もちろん、としきさんの方が正統派だと思います。いろいろなことを書きましたが。結論は、楽をしましょうよ、ということに尽きるわけで。楽をする、という意味では、としきさんのような正統派のやりかたが良いと思います。それが出来ない私は、やっぱり楽をしようと思っていないのかもですね。(^^;それよりも早く頭の中のアイデアをコードにしたいという欲求が強いのでしょう。しないとアイデアが消えてしまいそうだから。1多分、最大というか基本的な違いはここ。それよりも早く頭の中のアイデアをコードにしたいという欲求が強いのでしょう。しないとアイデアが消えてしまいそうだから。(^^;;私はアイディアをコードではなく日本語で考えている、ということ。日本語でメモをしている。逆に言うと、ナイスなコードを思いつく、ということはあんまりなさそうです。あと、前述のEmmettさんとの対話の部分、読み直して、もしかしたら私に誤解があったかもしれないというのがkonnoさんの指摘で気がついた。組んで行くということはやったことがありません。バルの1行目から、じかに書き始めます。さんのマクロ作法がわかったような気がします。さんとほとんど変わりません。このように同意していますが、その後にこのときの薄らぼんやりとした記憶では、私、サブルーチンから書き始めるのではなく、全体の大枠から書き始める、という意味でEmmettさんと同じだな、と感じたように覚えています。確かにこの部分、解釈によってはいろいろと怪しいかもしれない。私はアイディアをコードではなく日本語で考えている、ということ。日本語でメモをしている。逆に言うと、ナイスなコードを思いつく、ということはあんまりなさそうです。うーむ、私もアイデアが浮かんだ時点では、コードではなく日本語な気もしますがコード的な、パズルのピース的な漠然としたイメージなのかもしれませんね。確かにこの部分、解釈によってはいろいろと怪しいかもしれない。普通、枝葉であるサブルーチンから書き始める人はいませんよね。Emmettさんの書き込みを読み直したら、何か違う気がしてきました。いつでもいきなり、グローバルの1行目から、じかに書き始めます。ここ、私なら始めに類似したプログラムを探してそれを修正して使おうとします。ゼロから書き始めるなんて面倒だと思うので私はほとんどやったことがないのですよ。1いいかげん、タイトルを変えるべきだということに遅まきながら気がつきました。いう気も大いにしますが。たいそうな内容を書くわけでもない。ここ、私なら始めに類似したプログラムを探してそれを修正して使おうとします。ゼロから書き始めるなんて面倒だと思うので私はほとんどやったことがないのですよ。類似したプログラムが見つからないとき、というのも私の場合はたまにある。ん〜、最近はあんまりそういうこともありませんが。ツリーで作ったマクロ。いう案件、konnoさんはあまり手を出さないということでしょうか。私も最近はそういうことがなくなったということは、年をとったせいかも。いいかげん、タイトルを変えるべきだということに遅まきながら気がつきました。私も途中で思ったのですが、まあいいかと。類似したプログラムが見つからないとき、というのも私の場合はたまにある。ん〜、最近はあんまりそういうこともありませんが。ツリーで作ったマクロ。いう案件、konnoさんはあまり手を出さないということでしょうか。いう案件も多いと思います。その場合でも入出力など使えるルーチンは切り貼りで済まします。いえばテレビドラマ「ガリレオ」の教授は思いついたらいきなり数式を書きなぐっていましたね。いうやり方ができるのは、c.mosさんくらいではないかと。私も最近はそういうことがなくなったということは、年をとったせいかも。私も年を取って、昔のやり方でしか出来なくなったような気がします。BASICのソースは普通大文字で書きますが、最近小文字の行を混在させてますよね。そこは、自分で一から書いているよという自己主張なのかもしれません。