Scala PartialFunction 部分関数
PartialFunction
- Scala Standard Library 2.12.8 - scala.PartialFunction
- Scaladocの例を見る限り、caseをつかうと、PartialFunctionを簡単に書けるのか。
- caseで指定された限られた範囲で、部分的に関数を定義しているってことだろうか。
- just another scala quant
- FizzBuzzの実装だけど、PartialFunctionを使った実装がある。
- この例だと、複数のcaseを、isDefinedAtメソッドでひとつにまとめているように見える。
- Scala School - Pattern matching & functional composition
- 関数をうまいこと組み合わせるための方法
- Understanding PartialFunction
結局、部分関数とは、なんでしょう?
やっぱり、限られた範囲で定義した関数を、部分関数とよんでいるようだ。
自分の中で思い浮かんだ例としては、高校の数学でやった定義域のある関数を思い出した。
Scalaの部分関数というのは、定義域のある関数を表現するようなもののように見える。この定義域なら、こんな関数を適用する。この定義域でないなら、何もしない。それを表現するもの。
定義域X1で定義された関数はf, 定義域X2で定義された関数はg, 定義域X3で定義された関数はh,,,,のように、定義域ごとにバラバラに関数を定義するから、部分関数って表現なんだろうか。
そうすると、ScaladocScala Standard Library 2.12.8 - scala.PartialFunctionの
- abstract def apply(v1: A): B
- Apply the body of this function to the argument.
- abstract def isDefinedAt(x: A): Boolean
- Checks if a value is contained in the function's domain.
というのも、そのまんま、しっくりくるかなあ。さらに、
- def orElse[A1 <: A, B1 >: B](that: PartialFunction[A1, B1]): PartialFunction[A1, B1]
これも、f(X1)とg(X2)とh(X3)を、ひとつの関数にするものとして、ピンとくるな
あらためて、部分関数を調べてみると、プログラミングや情報科学ではなくて、数学の概念としてちゃんとあった
Function (mathematics) - Wikipedia
これを見ると、部分関数というのは、定義域の一部に対して、定義されている関数のこというわけか。なるほどー。
関数型言語をやるときは、用語がどこに由来しているか、ちょっと調べるといいのかもな。そのプログラミング言語特有なのか、情報科学なのか、数学なのか。