コードにいくつかのブール述語が定義されているとします。
def pred1[A](x: A): Boolean = { ... }
def pred2[A](x: A): Boolean = { ... }
def pred3[A](x: A): Boolean = { ... }
pred1
ここで、たとえばandの論理和である関数を作成できるようにしたいと考えていますpred3
。
したがって、次のようなものです:
def pred1Or3[A](x: A) = or(pred1, pred2)
さらに良いことに、独自の結合関数を提供できるように一般化できるとよいでしょう。したがって、代わりに論理 AND が必要な場合は、次のように呼び出します。
def pred1And3[A](x: A) = combine({_ && _}, pred1, pred2)
この方法で同じ基本的な効果を達成できます。
def pred1And3[A](x: A) = Seq(pred1, pred2) map { _(x) } reduce { _ && _ }
しかし、それは少し冗長に見え、意図を曇らせます。Scalaでこれを行う簡単な方法はありますか?