by shigemk2

当面は技術的なことしか書かない

正規乱数モドキをScalaで書く その2

あけましておめでとうございます。

桁数が揃っていないので、ちょっと直しました。

random.201501010010.scala

桁数を揃えたバージョンがこちらです。

f:id:shigemk2:20150101001110p:plain

なお、もう副作用まみれで副作用のない書き方はどうしたものかっていう気分です。

"abc" * 3ってやると"abcabcabc"って結果になるのは、なんとなくScalaっぽい気がしました。

flatMapとは

f:id:shigemk2:20150101163214p:plain

scala> List(1, 2, 3).flatMap(x => List(x*2))
res8: List[Int] = List(2, 4, 6)

scala> List(1, 2, 3).flatMap(x => List("a"))
res9: List[String] = List(a, a, a)

scala> List(1, 2, 3).flatMap(_ => List("a"))
res10: List[String] = List(a, a, a)

flatMap自体はこういう説明。

コレクションの要素を変換する。関数fでAを処理して複数のBを返すと、それらを結合した新しいコレクションが作られる。

Scalaコレクションメソッドメモ(Hishidama's Scala collection method Memo)

Modegramming Style: Scala Tips / flatMapとbind(>>=)の違い

使い方はなんとなくこんな感じ。

flatMapはbind(>>=)とほぼ同じという話まで持ち上がってきており、リストなどから値を取り出して、それを関数に渡すという理解がいまいまのところ。

シグネチャ

シグネチャ - Wikipedia

プログラミングで、メソッドや関数の、名前・戻り値や引数の型などの組み合わせ。

RubyやPythonとは違い、シグネチャが一意である場合に買い切り2つ以上のメソッドを同じ名前にする、つまり多重定義することができるのがJavaとかScala。

Generics(Java)の型消去について - sinsengumi血風録