A higher order function is a function which takes functions as parameters or returns a function. As an example, let us consider the following
1) Sum of all integers between two integers a and b
def sumInts(a:Int,b:Int):Int ={
if (a>b)
0
else
a+sumInts(a+1,b)
}
2) Sum of square of all integers between two integers a and b
def square(x:Int) :Int=x*x
def sumSqaure(a:Int,b:Int):Int ={
If(a>b)
0
else
square(a) +sumSquare(a+1,b)
}
3) A function to square all the powers 2^n where n betweentwo integers a and b
def powerOfTwo(x:Int):Int={
if(x==0)
1
else
2*powerOfTwo(x-1)
}
def sumPowerOfTwo(a:Int,b:Int):Int ={
if(a>b)
0
else
powerOfTwo(a) + sumPowerOfTwo(a+1,b)
}
These functions are all instances of {Summation from a to b} for different values of f . We can factor out the common pattern by defining a function sum
def sum(f: Int => Int, a: Int, b: Int): Int ={
if (a > b)
0
else
f(a) + sum(f, a + 1, b)
}
Using sum, we can formulate the three summing functions as follows.
def sumInts(a: Int, b: Int): Int ={
sum(id, a, b)
}
def sumSquares(a: Int, b: Int): Int ={
sum(square, a, b)
}
def sumPowerOfTwo(a: Int, b: Int): Int = {
sum(powerOfTwo, a, b)
}
where
def id(x: Int): Int = x
def square(x: Int): Int = x * x
def powerOfTwo(x: Int): Int = {
if (x == 0)
1
else
2 * powerOfTwo(x-1)
}
Monday, May 19, 2008
Blog Archive
-
▼
2008
(26)
-
▼
May
(10)
- new java puzzlers (As presented in Javapolis --2007)
- How to derail your experts and ruin their performance
- Living out of the box
- The Dreyfus model
- The bane of java exceptional handling
- Iterating over Map's
- N Queen Problem
- Identifying Patterns and creating Higher Order Fun...
- Tail Recursion
- Scala vs Java : Implementing quicksort -- not opti...
-
▼
May
(10)