web-dev-qa-db-ja.com

Scala:「any」および「all」関数

私のHaskell *は少しさびているので、明らかなことを見逃していると想像できます。

def any[A](s: Traversable[A], f: A => Boolean): Boolean = {
    s.foldLeft(false)((bool, elem) => bool || f(elem))
}

これらのプロパティのいずれかがitに適用されますか?

  1. Scala libsのどこかに定義済み
  2. 状況に応じて、ワンライナーとして書かれた高速
  3. 間違っています(テストしませんでした、申し訳ありません;))

*実際にはSMLですが、それは99%同じですが、太陽の下では誰にも知られていません。

61
flying sheep
  1. 定義済みで、existsと呼ばれます。そして、forallはあなたが探している「すべて」の関数です。

    scala> Vector(3, 4, 5).exists(_ % 2 == 0)
    res1: Boolean = true
    
    scala> Vector(3, 4, 5).forall(_ % 2 == 0)
    res2: Boolean = false
    
  2. forscala.util.control.Breaksから)を指定したbreakループを使用して、パフォーマンスを向上させることができます。 (existsおよびforallの標準ライブラリ実装を参照してください。)

  3. あたりです。

103
missingfaktor

anyおよびallと同等のメソッドがTraversableトレイトに存在します。

def all[A](xs: Traversable[A], p: A => Boolean): Boolean = xs forall p

def any[A](xs: Traversable[A], p: A => Boolean): Boolean = xs exists p
6
David Winslow

existsはどうですか:

scala> List(1,2,3).exists(_ > 2)
res12: Boolean = true

Traversable にあります。

1
Adam Rabung