Scala PartialFunction 部分関数

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
これを見ると、部分関数というのは、定義域の一部に対して、定義されている関数のこというわけか。なるほどー。

関数型言語をやるときは、用語がどこに由来しているか、ちょっと調べるといいのかもな。そのプログラミング言語特有なのか、情報科学なのか、数学なのか。