goo blog サービス終了のお知らせ 

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

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

Scalaで遊んでました。factorialとkaijyo

2019-05-31 16:34:40 | Scala

 上は「実践Scala入門」P82の例題です。下は自分の数少ない、知識を開けました。"(-""-)"再帰を使うのでスタックオバーフローに注意。定義をそのまま書けるので、結構大事そうですが、難しい面もありそうです。ですが、大事な処理は多分ですが、結構出来て居るはずです。


Scalaで遊んでました。requireメソッド

2019-05-30 23:27:36 | Scala

例外を感知しても、x / yで実行時エラーになるのが不味い。どうすれば良いんでしょうね。

 

Javaではthrow new Exception("");が起きると m / nはされないようです。

 

 実行画面が違いますが、計算自体がプラスだけならうえでも良いかも。でも一般的にはマイナスもあるので駄目ですね。どうしたらすっきりしますかね?


Scalaで遊んでました。Listのreverse

2019-05-29 11:58:32 | Scala

実践Scala入門ではmatchの例です。ここは泥臭い、手続型をやってみましたが、一行で書けるようです。

 

reverseNo2が例題です。recursiveを使っているようですが。(*_*;

reverseの引数はArray[Int]でしたが、Array[Any]でやってみました。

List(6,5,4,3,2,1)と結果がなってます。これはここを見ると、文字なのか?数字なのか?下のList(d,c,b,a)ですので、文字なんですかね。

 

 


Scalaで遊んでました。参考書を変えました。Pointクラス

2019-05-22 08:46:33 | Scala

 コップ本がなかなか進まないので、というか、全体が見えない、というか、難しい。(-_-;)幾分簡単かと思える、「実践Scala入門」も時々見ていきたいです。その中の例題です。

 この程度であれば、何とか理解できたと思います。

追記)以前に何故か?()が出力されることがありました。今回もそうなったのですが、原因が分かりました。今はメソッドtoStringで文字列を返してきます。それをprintするので問題ないのですが、前はその部分をshowPoinメソッドでprintしてました。そのメソッドをprint(c.showPoint)のようにしてました。多分ですが、c.showPointがUnitですので、返す値が()ということでしょうね。一見不思議でしたが、何となく目から鱗(-_-;)です。


Scalaで遊んでました。パターンガードを持つmatch式

2019-05-17 21:10:25 | Scala

コップ本から

 パターンガードはパターンの後ろに付けて、ifから始める。ifの後のガードは任意の論理式で良い。その式の中では、一般にパターンの中の変数が参照される。nとsとかのことでしょうね。この場合はリターンはIntになってますが、IntとStringなど混ぜてはいけないでしょうね。

 パターン変数は、パターンの中で一度しか登場させることが出来ない。BinOpの例で論じられてます。

 


Scalaで遊んでました。Option型

2019-05-16 19:32:40 | Scala

 コップ本P280からオプション値は、2種類の形を持っている。Some(x)という形をとるときは、xが実際の値である。もう一つの形は、値がないことを表すNoneである。ということらしいです。(-_-;)実際、-1を返してくれるには、どうすれば良いんだろうか?


Scalaで遊んでました。パターンの種類(型付きパターン、型消去)の値を返す

2019-05-16 11:50:15 | Scala

 def generalSizeが値を返しても、何なのか?分かりません。こんなときはタプルで返すと簡単なようです。返された値を分けないと、使えないでしょうから、青線の上に分け方あります。こうすれば例えば、文字列で大きさは3とか分かるので、使い道はありそうです。


Scalaで遊んでました。パターンの種類(型付きパターン、型消去)

2019-05-16 09:24:12 | Scala

 型付きパターンの場合は、分けられてしまえば、文字列とかMap,Listとして扱えるようなので、勧められてます。一方では勧められないスタイルもあるようです。でもListやMapでは中まではチェックされないようです。List(1,2,3)でもList("abc","def","ghi")でも区別が使い無いようです。但しArrayだけはArray(1,2,3)とArray("abc","def","ghi")が区別されるようです。


Scalaで遊んでました。パターンの種類(コンストラクタ、シーケンス、任意長シーケンス、タプル)

2019-05-15 20:04:25 | Scala

コップ本から、コンストラクターパターンの例題の説明

 トップオブジェクトがBinOpかどうかチェックされるだけで無く、コンストラクタの第3パラメータがNumberで値が0かどうかまでチェックされる。


Scalaで遊んでました。パターンの種類(変数か定数か)

2019-05-15 14:50:55 | Scala

EとPiはマッチしません。

 コップ本ではval pi = Math.Piとなってますが、プログラムで入力するとval pi = Math.PIとIが大文字になります。または上の上のようにval pi = Piとなるようです。

piが変数でEとマッチングしたようになるようです。デフォルトケースはunreachable code到達できないコードになってるようです。

コップ本の説明から

 変数パターンは、ワイルドカードと同じように、任意のオブジェクトにマッチする。しかし、ワイルドカードとは異なり、Scalaはオブジェクトに変数を束縛する。その後は、変数と使ってオブジェクトを操作できる。となってます。(-_-;)

 

どうしても小文字のpiを使いたいのであれば、`pi`とするとmatchしなくなるようです。ワーニングも出ないようです。

コップ本から

 Scalaは先頭が小文字になっている単純名はパターン変数、そうでないものは定数とみなす。バッククォートの使い方は2種類。パターンマッチで小文字に識別子を定数として扱う。(ここの例)キーワードの語を識別子として扱う。ことが出来るそうです。