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); } }