def appliesToMoreThanHalf(s: List[Int], p: Int => Boolean): Boolean = {
var count = 0
def iter(startingIndex: Int): Boolean = {
if (startingIndex < s.length) {
if (p(s(startingIndex))) {
count += 1
}
iter(startingIndex + 1)
}
count >= (s.length / 2 + 1)
}
iter(0)
}
Here's an example of this function being called to determine if more than half of the elements in a list are even (i.e. evenly divisible by 2).
def main(args: Array[String]) {
val l: List[Int] = List(1, 2, 2, 3, 4, 5, 6)
if (appliesToMoreThanHalf(l, p => (p % 2 == 0))) {
println("the function applies to more than half of the elements")
} else {
println("the function does not apply to more than half of the elements")
}
}
Granted, there is a much simpler way to determine if more than half of the elements hold true for a particular predicate, but this serves as a demonstration of nested functions.
No comments:
Post a Comment