fork download
  1. import java.util.Collections;
  2. import java.util.Iterator;
  3. import java.util.function.Function;
  4.  
  5. public class Main {
  6. public static abstract class AttrValue implements Function, Iterable {}
  7.  
  8. public static abstract class AttrValFunctional {
  9.  
  10. public static AttrValue substract(AttrValue x, AttrValue y) {
  11. if(x instanceof DeterministicValue && y instanceof DeterministicValue){
  12. return subtractDD((DeterministicValue)x, (DeterministicValue)y);
  13. }
  14. if(x instanceof DeterministicValue && y instanceof DiscreteDistributionValue){
  15. return subtractDDD((DeterministicValue)x, (DiscreteDistributionValue)y);
  16. }
  17. if(x instanceof DiscreteDistributionValue && y instanceof DeterministicValue){
  18. return negative(subtractDDD((DeterministicValue)y, (DiscreteDistributionValue)x));
  19. }
  20. if(x instanceof DiscreteDistributionValue && y instanceof DiscreteDistributionValue){
  21. return subtractDDDD((DiscreteDistributionValue)y, (DiscreteDistributionValue)x);
  22. }
  23. return null;
  24. }
  25.  
  26. private static DeterministicValue negative(DeterministicValue a){
  27. return new DeterministicValue(-a.getValue());
  28. }
  29.  
  30. private static DiscreteDistributionValue negative(DiscreteDistributionValue b){
  31. return new DiscreteDistributionValue();
  32. }
  33.  
  34. private static DeterministicValue subtractDD(DeterministicValue a, DeterministicValue b){
  35. return new DeterministicValue(a.getValue() - b.getValue());
  36. }
  37.  
  38. private static DiscreteDistributionValue subtractDDD(DeterministicValue a, DiscreteDistributionValue b){
  39. return new DiscreteDistributionValue();
  40. }
  41.  
  42. private static DiscreteDistributionValue subtractDDDD(DiscreteDistributionValue a, DiscreteDistributionValue b){
  43. return new DiscreteDistributionValue();
  44. }
  45.  
  46. }
  47.  
  48. public static class DeterministicValue extends AttrValue {
  49. private Double value;
  50.  
  51. public DeterministicValue(Double a){
  52. this.value = a;
  53. }
  54. public Double getValue(){
  55. return value;
  56. }
  57.  
  58. public Double getProb(){
  59. return 1.0;
  60. }
  61.  
  62. @Override
  63. public Iterator iterator() {
  64. return Collections.singleton(value).iterator();
  65. }
  66.  
  67. @Override
  68. public boolean equals(Object o){
  69. return this.value == ((DeterministicValue)o).value;
  70. }
  71.  
  72. @Override
  73. public Object apply(Object o) {
  74. if(o.equals(this)) return 1.0;
  75. return 0.0;
  76. }
  77.  
  78. @Override
  79. public String toString() {
  80. return "value="+value+" probability="+"1.0";
  81. }
  82.  
  83. }
  84.  
  85. public static class DiscreteDistributionValue extends AttrValue {
  86.  
  87.  
  88. public DiscreteDistributionValue(){
  89. }
  90.  
  91. @Override
  92. public Iterator iterator() {
  93. return null;
  94. }
  95.  
  96. @Override
  97. public Object apply(Object o) {
  98. return null;
  99. }
  100.  
  101. @Override
  102. public String toString() {
  103. return "";
  104. }
  105. }
  106.  
  107. public static void main(String[] args) {
  108. AttrValue e = new DeterministicValue(1.0);
  109. AttrValue f = new DeterministicValue(3.0);
  110. // AttributeValue g = new DiscrDstrValue([2 0.5 3 0.5]);
  111. System.out.println("Hello World");
  112. System.out.println(AttrValFunctional.substract(e,f));
  113. }
  114. }
  115.  
Success #stdin #stdout 0.1s 36348KB
stdin
Standard input is empty
stdout
Hello World
value=-2.0 probability=1.0