27行目の意味がハッキリしなかったので、42行目から44行目で書き換えてみました。
Tryは両方で+1されてます。evalとevalNo2の両方。
27行目の意味がハッキリしなかったので、42行目から44行目で書き換えてみました。
Tryは両方で+1されてます。evalとevalNo2の両方。
8回では正解にたどり着けないので、20回までやれるにしました。慣れも必要そうです。secretは1000以上ですので、答えに苦しんで0123とかやるとエラーになります。本当は、正解にたどり着くのをどうすれば良いのかなあ?自分には無理そうですが…。
先ずは、secretが4桁になっているか確かめます。
20行目と21行目は分かりますが、22行目と23行目は分かりづらい。直感的には分かりますが…。疑問も感じます。理解してない?ここの発想が出てきません。(苦)でも、Bulls and Cowsの肝ですし、cametanさん式だとevalの部分ですね。そのまま使います。
どうやら大丈夫そうです。10回調べてみました。
cametanさんのブログに有ったのは、数字4桁ですので、ちょっとだけ違います。答えるのが面倒なので、secretを表示してます。これをcametanさん式に変えると勉強になるかな?プログラミングではいろんなやり方があるんですね。
Bardに、初め「Bulls and Cows」 知ってますか?と聞いたら、知ってるというので、Scalaで表示できますか?と聞いたら、表示されたのはHello Worldのコードでした。質問にもコツが必要なんですかね。
末尾再帰と普通の再帰、両方やってみました。
普通の再帰はスタックを消費しますので、実行には注意が必要です。多分。
先ずは、普通にやってみます。1x2x…x10の値です。
終了は10回目の計算が終わったとき。aとbの初期値はa*bは1にします。bにはnが代入されますし、aにはa*nつまりa*bが代入される。んだろうと思います。結果は普通のやり方と同じだったので、多分良いと思います。
引っかかったのが9行目、a + bとは、書けませんでした。a、bはBigIntegerのインスタンスと言うことでは、a.add(b)と書くのが普通ですが…。警告は@tailrecでした。末尾再帰があるということですかね。
whileを抜けるには、break以外でも可能のようです。While( ){ }とDo{ } While( )両方あるようですが、コップ本ではWhileとvar 変数は、付き物なので使わないほうが関数型に近づくと書いてます。VBぽっくないですか?Whileは値を作らないUnitだと書いてます。時々分けの分からない()が表示される時があります。それのことなのかもしれません。
traitではvar namae: StringでOKですが、classではnamae = ""としておかないと駄目みたいです。その他の数値の項目も0や0.0にしておきます。
なかなか手ごわいtraitです。
traitは、クラスパラメータを取れない。例えばclass Point(x : Int, y : Int)はOKだが、trait NoPoint(x : Int, y : Int)はNGとコップ本3版P220に書いてますが、Scala3から変わっているようです。上の例では、trait Playerのnamaeとnenreiがそれです。class Fielder(var namae: String, var nenrei: Int)で、設定されるようです。
ChatGPTでプログラマの仕事が無くなると言っていますが、本当ですかね?例えば、他人が書いたプログラムは、時として自分が書いても後から見たら、分からないことがショッチュウです。メンテナンスできますかね?それくらい完璧なものが作れるとは、信じがたいのですが…。
val ohtaniのとこだけ前と違います。どうやらtraitが複数あるときは、例のようにwith Pitching with Batting{ }と書いて、{ }の中はそれぞれの変数が使える。初期化も出来るようです。
Battingとpitchingが単独だと初期化が上手く言ったんですが、NitouryuでPitchingとBatting両方をしてすると、初期化が上手くいかなかった。
選手をピッチャーとバッターに分けて、大谷選手みたいな人はNitouryuとして、traitを2個つなげて、クラス定義をしてみました。これだとpitchingとbattingが全て一様にしかインスタンスを作れません。確認はしてませんが、出来るようなことを書いているようです。Kop本では。
ここ暫く、大谷翔平選手と吉田正尚選手のニュースが毎日出ますね。大谷翔平選手は、投げる、打つ、走る全部一流なので、打つ方が駄目でも、何かしら見せてくれます。吉田正尚選手は投げることはしないですが、打つ、守る一流ですね。
traitで悩んでました。野手を元に、二刀流はどう書けば良いのか?四苦八苦した結果が下です。全てのデータを入れた一個のクラスでも良いのかもしれません。traitされた項目は(この場合はkati、make)、newでインスタンスを作成したようには書けないんですかね。