import java.util.Collections;
import java.util.Iterator;
import java.util.function.Function;
public class Main {
public static abstract class AttrValue implements Function, Iterable {}
public static abstract class AttrValFunctional {
public static AttrValue substract(AttrValue x, AttrValue y) {
if(x instanceof DeterministicValue && y instanceof DeterministicValue){
return subtractDD((DeterministicValue)x, (DeterministicValue)y);
}
if(x instanceof DeterministicValue && y instanceof DiscreteDistributionValue){
return subtractDDD((DeterministicValue)x, (DiscreteDistributionValue)y);
}
if(x instanceof DiscreteDistributionValue && y instanceof DeterministicValue){
return negative(subtractDDD((DeterministicValue)y, (DiscreteDistributionValue)x));
}
if(x instanceof DiscreteDistributionValue && y instanceof DiscreteDistributionValue){
return subtractDDDD((DiscreteDistributionValue)y, (DiscreteDistributionValue)x);
}
return null;
}
private static DeterministicValue negative(DeterministicValue a){
return new DeterministicValue(-a.getValue());
}
private static DiscreteDistributionValue negative(DiscreteDistributionValue b){
return new DiscreteDistributionValue();
}
private static DeterministicValue subtractDD(DeterministicValue a, DeterministicValue b){
return new DeterministicValue(a.getValue() - b.getValue());
}
private static DiscreteDistributionValue subtractDDD(DeterministicValue a, DiscreteDistributionValue b){
return new DiscreteDistributionValue();
}
private static DiscreteDistributionValue subtractDDDD(DiscreteDistributionValue a, DiscreteDistributionValue b){
return new DiscreteDistributionValue();
}
}
public static class DeterministicValue extends AttrValue {
public DeterministicValue
(Double a
){ this.value = a;
}
return value;
}
return 1.0;
}
@Override
}
@Override
public boolean equals
(Object o
){ return this.value == ((DeterministicValue)o).value;
}
@Override
if(o.equals(this)) return 1.0;
return 0.0;
}
@Override
return "value="+value+" probability="+"1.0";
}
}
public static class DiscreteDistributionValue extends AttrValue {
public DiscreteDistributionValue(){
}
@Override
return null;
}
@Override
return null;
}
@Override
return "";
}
}
public static void main
(String[] args
) { AttrValue e = new DeterministicValue(1.0);
AttrValue f = new DeterministicValue(3.0);
// AttributeValue g = new DiscrDstrValue([2 0.5 3 0.5]);
System.
out.
println("Hello World"); System.
out.
println(AttrValFunctional.
substract(e,f
)); }
}