package edu.neu.ccs.demeterf.examples;
/** Functional Transformation Test Class. This includes structural duplication,
* Int2Str, and a simple type unifying traversal, ToString.
*/
// Import the Transformation Package
import edu.neu.ccs.demeterf.*;
import edu.neu.ccs.demeterf.IDb;
import edu.neu.ccs.demeterf.IDf;
// Functional Lists in Java
abstract class List{}
class Empty extends List{}
class Cons extends List{
T first;
List rest;
Cons(T f, List r){ first = f; rest = r; }
}
// Fold and Map Using Builders
abstract class Fold extends IDb{
public abstract R combine(Empty l);
public abstract R combine(Cons l, T f, R r);
}
class Map extends IDb{
public List combine(Empty l){ return new Empty(); }
public List combine(Cons l, R f, List r){ return new Cons(f, r); }
}
// A Few Instances of Fold...
class Length extends Fold{
public Integer combine(Empty l){ return 0; }
public Integer combine(Cons l, Integer f, Integer r){ return r+1; }
}
class Sum extends Length{
public Integer combine(Cons l, Integer f, Integer r){ return f+r; }
}
// A Few Functions for Transformations
class Add1 extends IDf{ public Integer apply(Integer i){ return i+1; } }
class Int2Str extends IDf{ public String apply(Integer i){ return "'"+i+"'"; } }
// ToString Builder (Builds a String)
class ToString extends Fold