Higher-Order Functions
Predicate Checks
Test a list with all and any predicates.
predicate-check
`forall` is true when every element passes the test, and `exists` is true when at least one does. Their results combine into a single label.
Predicate Checks
PredicateCheck.scala
Replay: real traced execution (multi-file project)
object Main {
def main(args: Array[String]): Unit = {
val limit = 2
val nums = List(1, 2, 3, 4)
val allBig = nums.forall(n => n > limit)
val anyBig = nums.exists(n => n > limit)
var label = "none"
if (anyBig) {
label = "some"
}
if (allBig) {
label = "all"
}
println("allBig=" + allBig)
println("anyBig=" + anyBig)
println("label=" + label)
}
}
object Main {
def main(args: Array[String]): Unit = {
val limit = 0
val nums = List(1, 2, 3, 4)
val allBig = nums.forall(n => n > limit)
val anyBig = nums.exists(n => n > limit)
var label = "none"
if (anyBig) {
label = "some"
}
if (allBig) {
label = "all"
}
println("allBig=" + allBig)
println("anyBig=" + anyBig)
println("label=" + label)
}
}
object Main {
def main(args: Array[String]): Unit = {
val limit = 5
val nums = List(1, 2, 3, 4)
val allBig = nums.forall(n => n > limit)
val anyBig = nums.exists(n => n > limit)
var label = "none"
if (anyBig) {
label = "some"
}
if (allBig) {
label = "all"
}
println("allBig=" + allBig)
println("anyBig=" + anyBig)
println("label=" + label)
}
}
limit ← 2, nums ← List(1, 2, 3, 4), allBig ← false, anyBig ← true
1object Main {2 def main(args: Array[String]): Unit = {3 val limit→ 2 = 2 //@limit=0, 54 val nums→ List(1, 2, 3, 4) = List(1, 2, 3, 4)5 val allBig→ false = numsList(1, 2, 3, 4).forall(n => n > limit)6 val anyBig→ true = numsList(1, 2, 3, 4).exists(n => n > limit)78 var label→ none = "none"9 if (anyBig) {10 label = "some"label ← some
8var label = "none"9if (anyBigtrue) {10 label→ some = "some"11}12if (allBig) {println("allBig=" + allBig)
16 println("allBig=" + allBigfalse)17 println("anyBig=" + anyBigtrue)18 println("label=" + labelsome)19 }20}outputallBig=false anyBig=true label=some
limit ← 0, nums ← List(1, 2, 3, 4), allBig ← true, anyBig ← true
1object Main {2 def main(args: Array[String]): Unit = {3 val limit→ 0 = 04 val nums→ List(1, 2, 3, 4) = List(1, 2, 3, 4)5 val allBig→ true = numsList(1, 2, 3, 4).forall(n => n > limit)6 val anyBig→ true = numsList(1, 2, 3, 4).exists(n => n > limit)78 var label→ none = "none"9 if (anyBig) {10 label = "some"label ← some
8var label = "none"9if (anyBigtrue) {10 label→ some = "some"11}12if (allBig) {label ← all
11}12if (allBigtrue) {13 label→ all = "all"14}println("allBig=" + allBig)
16 println("allBig=" + allBigtrue)17 println("anyBig=" + anyBigtrue)18 println("label=" + labelall)19 }20}outputallBig=true anyBig=true label=all
limit ← 5, nums ← List(1, 2, 3, 4), allBig ← false, anyBig ← false
1object Main {2 def main(args: Array[String]): Unit = {3 val limit→ 5 = 54 val nums→ List(1, 2, 3, 4) = List(1, 2, 3, 4)5 val allBig→ false = numsList(1, 2, 3, 4).forall(n => n > limit)6 val anyBig→ false = numsList(1, 2, 3, 4).exists(n => n > limit)78 var label→ none = "none"9 if (anyBig) {10 label = "some"11 }12 if (allBig) {13 label = "all"14 }1516 println("allBig=" + allBigfalse)17 println("anyBig=" + anyBigfalse)18 println("label=" + labelnone)19 }20}outputallBig=false anyBig=false label=none