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