新しいアカウントで始めました。

身の回りの出来事や写真が中心です。

石取りゲーム、cametan_42さんのブログから、続きNo2。

2023-02-08 19:58:44 | Scala

 cametan_42さんのヒントから、breakでなく、19行目return thisに変えてみました。すると良いようです。18行目は多分、ゲームが正常に動く条件のようです。

上の図のように、取れない石を入力すると、while (true)のループから抜けられないようです。

 

def readをjava版と同じように直してみました。

18行で条件が合うと、return thisします。23行のthisでリターンする時もあったと思います。

 Scalaのbreakはjavaのbreakと違うんんですかね?最後はコンピュータが勝つようですが、表示がおかしい?cametan_42さんのブログをもう一度見てみますが、全体の構造が理解できてません。(笑)


コメント (2)    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 石取りゲーム。cametan_42さ... | トップ | 石取りゲーム、cametan_42さ... »
最新の画像もっと見る

2 コメント

コメント日が  古い順  |   新しい順
Scalaは全然知らないですが (cametan_42)
2023-02-08 22:24:04
Scalaは全然知らないですが、18行目。
ScalaとRubyが似てるなら、ひょっとしたら「return」ってキーワードは必要ないのかも。
RubyはANSI Common Lispと同様に「必ず値を返す」んで、returnは必要ない構造なんで、Scalaもそれと同じ設計方針かもしれません。

> 全体の構造が理解できてません。

僕のブログには何度か書いてますが、REPL(Read-Eval-Print Loop)と言うのはソフトウェアの「設計方針」です。
要は「読み込み部」「評価部」「印字部」と、基本3つの関数を別々に作って、それらを組み合わせてループ構文で回す。
それだけ、です。
ただし、「それだけ」が重要で、ソフトウェアの「開発方針」になる。
逆に言うと、スクリプトはREPL構造を持たないプログラムだ、と言う事が出来ます。まぁ、正確な定義ではないですけどね。

例えば一番簡単な例として次の例を考える。
「入力が"bye"だった時だけ"また来てくださいね!"と表示し、それ以外は入力をそのまま表示するソフトウェアを書け」

例えばPythonだったら以下のようになるでしょう。

# Read(入力部) -> input関数を使えば充分

# Eval(評価部) -> Readが渡してきた値をそのまま返せばいい

def engine(x):
 return x

# Print(印字部) -> print関数を使えば充分

# ソフトウェア本体(REPL: Read-Eval-Print Loop)
while True:
 x = input(">>> ") # 入力
 if x.lowercase() == "bye":
  print("また来てくださいね!")
  import sys
  sys.exit()
 else:
  print(engine(x)) # REPL本体

このケースの場合、シンプル過ぎるんで、一見、Eval(engine関数)が全く何もしてないように見えるけど、この「形式」は応用が効く。
要は、仮に入力に依って「処理が変更」される場合、評価部内で条件分けしていけば「複雑なソフトウェアを作る」方針が立ちやすい、と。
そういう事です。

ただ、Javaの場合は「単純な関数が作れない/作れない」んでどうしたもんか、ってのが件の記事のネタです。
返信する
コメント有難うございました (isam)
2023-02-13 11:35:03
コメントの内容をVBでやってみました。
返信する

Scala」カテゴリの最新記事