22行目と24行目を直したのですが、幾らか良くなったですかね?依然としてcntを使うという
混乱の元凶が存在してます。
22行目と24行目を直したのですが、幾らか良くなったですかね?依然としてcntを使うという
混乱の元凶が存在してます。
VBでもタプルは使えそうですが、昔はなかったと思うので、配列2個を使ったのですが
意外と面倒で、これがいけない原因なんでしょうね?
インデックスで参照してますので。
Dive into Pythonの例の、半分くらい、もっと少ないかも知れません。
多分合ってるとは思います。あとは、スッキリ書けると良いのですが…。
Visual Studio 2022でも文字化けしてます。
調べてみます。
Whereの書き方が、EndsWth(".vb")例えば、".vb"で終わる場合。
ホルダーの情報を得たくなりますが…。
C#の例ではvar posnumとありますが、VBでもVariant型は有ったと思いましが、Dim以外は使えない、様です。
これもわかり易い例です。
先ずは、分かりやすいところから。
whereとselectを少し変えてみます。
何かどこかでみたような感じの構文ですね。
BardにLazyについて聞いたのですが、コードはどこか違うようですね。
12行目でエラーですが、どうしたら良いのか?です。
「人間は考える葦である」では、Function名に代入形式らしいです。cametanさんによれば。下では、FunctionのリターンでReturnを使ってみましたが、行けますね。
Bardの意見では、Visual Basicの関数型はLINQが使われるみたいなことでしたので、少しやってみようかと思います。参考書は「独習C#第3版」に少し例が載ってます。Visual Basicと C#は、多分ですが、兄弟みたいなものですので、LINQ自体の書き方は同じみたいです。
九九の表です。コップ本に命令形と関数型プログラミングの例がありました。出来るだけ忠実にVBで置き換えたつもりです。関数型でプログラミングしたと言えるでしょうか?変数を使った時点で、違います、という事でしょうか?
6行目から23行目は、命令形の例です。関数型の例では、(多分、一応)Functionだけ使ってますが…。
前回の例に自動実装プロパティを使いましたが…。
Public Propertyから始まるメンバ変数m_Name、m_YearはPublicな変数とどこが違うの?setter、getterは自動実装されているということですが。Propertyを削除しても動けば、Publicな変数と変わらない、という事でしょう。
17行目にm_Name()、m_Year()と"()”が付いてましたが、変数名なので”()”は要りませんね。後は全く同じです。Public Propertyって何?
a=10, b=20,c=30,d=40,e=50,f=60となってます。
メンバ変数がPublicでないと駄目だったと思います。Propertyにすれば、Privateになるのかもしれません。
pushは文字列なので、計算するときはIntに戻します。
VBの場合は、Chr、Ascを使いこなさないと、C言語みたいに書けない。今も混乱しているかもしれません。
実行画面は同じ。
Class Hensuを作ってみました。前回の例だと、配列prioしか無いので、変数例えばa,b,c,d,e,fの値を入れる場所がない!。Class Hensuでもprioは使うので、それにvalを追加して、そこに値を入れてみましょう。8行目、単なる配列だと、グローバル変数かな、としてのprioは使えます。今は使わないので、コメントアウトします。Class Hensuは10行目から25行目まで。忘れてましたが、メンバ変数がここではPublicで指定してますが、本来ならPropertyを使うのかもしれません。
ここで四苦八苦していたのが、29行目で配列を作ったつもりでも、aryHensu(0)をデバッグで見るとNothingなんです?。なんとかたどり着いた30行目のヒントから肝の32行目に、至ってようやくClass Hensuのインスタンスの配列を初期化出来ました。実際にvalへ値をセットして、計算するとこは、これからです。
問題は上、回答はしたです。
73行から80行と87行から95行は、C言語だとwhile (( dt = pop() ) != '(')と書けるんですが、VBでは多分駄目でしょう。それとC言語だと'¥0’を文字列の最後の目印に使ってますが、VBだと多分エラーになるようです。C言語のほうがVBよりは進化しているんですかね。ポインタでは混乱します。C#だと通常使わないですよね。
この電卓プログラムでは、変数はaからzまでです。前回はSelect Caseだったのでaからe迄でしたが、今回Select Caseを使わなくていいので、aからzになりました。VBも型が煩いときもありますね。
少し長いので、WPに貼り付けています。
C言語の命令をVBで書いてます。出来るだけネタ本に沿うように。
C言語みたいに'a'-'a'とか'b'-'a'が出来れば、Select Caseの嵐いならないと思いますが…。
電卓プログラムとありますが、Basicインタープリタに近い、関数電卓みたいなものですかね。
取り敢えず、出来たところまで。
変数は今のところは、a,b,c,d,eの5文字だけ。C言語だとcharとintの区別があまり無いはず。VBだとその辺が厳しくて、variの添字にchar(vname) - char('a')みたいに、aなら0で、zなら25,つまりvari(0)からvari(25)でaからzまでの変数とするとこが上手く行かない。仕方なくSelect Caseでその場しのぎです。(笑)
原因不明ですが、計算が入ると、例えばc=a+bみたいに、でstack underになります。operateで2回popしてますが、どうも1個しかpushしていない感じです。
まだデバッグ途中です。トークン解析までは、例題のとおり出来ました。a8の意味はaは変数という意味です。a=b+c*(200-100)の解析とprint a+300の解析と最後にendで終了。
使っているenumと構造体、グローバル変数。使いすぎかも。ネタ本に忠実にしてますが、原本ではポインタだらけですが、それを配列と添字に変えるのが面倒。
コメント部分はこれからです。
以下はデバッグこれから。
C言語がネタ本ですので、VBで直すのは、楽でないですし、もっと楽にやる方法があると思います。トークンの解析が面倒ですね。この例では変数はアルファベット一文字。a=100を例にとっても、=を読み込まないとaという変数が決まらない。多分。それをBasic流にa = 100みたいに書くことにすれば、split出来るので楽かもしれません。