scala forall并且存在输出,它是否有意义

Rus*_*ang 8 scala

scala> val l = List()
l: List[Nothing] = List()

scala> l.forall(x=>false)
res0: Boolean = true

scala> l.forall(x=>true)
res1: Boolean = true

scala> l.exists(x=>false)
res2: Boolean = false

scala> l.exists(x=>true)
res3: Boolean = false
Run Code Online (Sandbox Code Playgroud)

对于2以上的谓词,既然列表中没有元素,那么forall如何返回true?我很迷惑.你能帮忙解释一下吗?

Ale*_*ula 15

你可以改写一下,这forall意味着列表中没有任何元素违反了给定的谓词.如果没有元素, 没有任何元素违反它.

forall如果集合为空,则显式返回true 的源代码:

def forall(p: A => Boolean): Boolean = {
    var these = this
    while (!these.isEmpty) {
       ...
    }
    true
}
Run Code Online (Sandbox Code Playgroud)


axe*_*l22 9

选择这些方法的语义与形式逻辑中的通用和存在量词的语义相一致.

方法forall充当通用量词 - true如果集合中没有谓词所在的元素,它将返回false.如果没有元素,那么谓词永远不会是假的并且forall是真的.

方法exists充当存在量词.它返回true如果存在的量,谓词是至少一种元素是true.如果没有元素,那么谓词永远不会为真并exists返回false.