import java.lang.*; /**A Function is an object that can be evaluated when applied to an arg.
Usage:
Implement a Function F that
responds to 'of(args)' by returning the desired function
of the arguments. This class can have objects that
can by (1) evaluated, (2) passed as arguments to methods.
class F implements Function{
public Object of(Object arg){
return arg.doubleValue();
}
}
Function f = new F;
Integrators.simpson(f, 0,1);
where Integrators.simpson(Function f, double lo, double hi)
returns a double.
@author Dick Botting
@version 2.1
*/
interface Function{
public Object of(Object arg);
}
/** The well known triangular number function */
class Triangle implements Function{
public Triangle(){
super();
}
public Object of(int n){
return new Integer(n*(n+1)/2);
}
public Object of(Object arg){
int n=((Integer)arg).intValue();
return this.of(n);
}
}
class TestFun {
public static void main(String argv[]){
Triangle triangle=new Triangle();
Integer I= new Integer(1);
Integer II=new Integer(2);
p(triangle.of(1));
p(triangle.of(2));
p(triangle.of(3));
p(new Triangle().of(4));
p(new Triangle().of(new Integer(5)));
p(dup(triangle, I));
p(dup(triangle, II));
p(summer(triangle, 1,4));
}
public static int summer(Function f, int lo, int hi){
int sum=0;
for(int i=lo; i<=hi; i++)
sum+=((Integer)f.of(new Integer(i))).intValue();
return (sum);
}
public static Object dup(Function F, Object x){
return comp(F,F,x);
}
public static Object comp(Function F, Function G, Object x){
return F.of( G.of(x));
}
private static void p(int i){
p(new Integer(i));
}
private static void p(Object x){
System.out.println(x);
}
}