Scala
#プログラミング言語
https://www.scala-lang.org/resources/img/frontpage/scala-spiral.png
JVM で動く
関数型言語
オブジェクト指向のシステムを使って関数型プログラミングを行う言語
型システムがかなり(Haskell、PureScriptの次くらいに)強力
高カインド型があるので汎用的なモナドが扱える
https://scala-text.github.io/scala_text/
配列、リスト、連想配列などへのアクセスが[]ではなく()で、関数として扱えるらしい
for がすごい
flatMap、filter、foreach、mapを使ったコードに脱糖されるらしい
code:scala
// map
for (n <- 1 to 10) yield n * 2
// filter
for (n <- 1 to 10 if n % 2 == 0) yield n
// ジェネレータ2個をループしてタプル
for (x <- 0 to 9; y <- 0 to 9) yield (x, y)
// ジェネレータ2個をループして2つの値が一致していないところでタプル
for (x <- 0 to 9; y <- 0 to 9 if x != y) yield (x, y)
code:scala
def headT(list: ListT): OptionT =
list match
case h :: _ => Some(h)
case _ => None
def div(a: Int, b: Int): OptionInt =
if b == 0 then None else Some(a / b)
@main def main(): Unit =
val z = for
x <- head(List(1, 2, 3))
y <- div(x, 2)
yield y
println(z)