## Sunday, April 28, 2013

### Scala Nested Functions

In Scala, we have the ability to define a function within another function. Here's an example of a function named "appliesToMoreThanHalf" that determines whether a certain predicate holds true for more than half of the values in a list. The function contains a nested function named "iter" that processes the list.

```  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.