add conditional
This commit is contained in:
parent
04f923a4ca
commit
6a4ef4ea70
@ -1,22 +1,25 @@
|
||||
class And implements Cond {
|
||||
private Cond lVal;
|
||||
private Cond rVal;
|
||||
|
||||
|
||||
public And(Cond lVal, Cond rVal) {
|
||||
this.lVal = lVal;
|
||||
this.rVal = rVal;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean eval() {
|
||||
return this.lVal.eval() && this.rVal.eval();
|
||||
if (!this.lVal.eval()) {
|
||||
return false;
|
||||
}
|
||||
return this.rVal.eval();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "(" + this.lVal + " & " + this.rVal + ")";
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Cond neg() {
|
||||
return new Or(lVal.neg(), rVal.neg());
|
||||
|
@ -1,22 +1,23 @@
|
||||
import cs2030s.fp.Constant;
|
||||
import cs2030s.fp.Memo;
|
||||
|
||||
class Bool implements Cond {
|
||||
private Boolean val;
|
||||
|
||||
private Memo<Boolean> val;
|
||||
|
||||
public Bool(Constant<Boolean> val) {
|
||||
this.val = val.init();
|
||||
this.val = Memo.from(val);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean eval() {
|
||||
return this.val;
|
||||
return this.val.get();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return this.val.toString().substring(0, 1);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Cond neg() {
|
||||
return new Not(this);
|
||||
|
13
Lab6/Or.java
13
Lab6/Or.java
@ -1,22 +1,25 @@
|
||||
class Or implements Cond {
|
||||
private Cond lVal;
|
||||
private Cond rVal;
|
||||
|
||||
|
||||
public Or(Cond lVal, Cond rVal) {
|
||||
this.lVal = lVal;
|
||||
this.rVal = rVal;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean eval() {
|
||||
return this.lVal.eval() || this.rVal.eval();
|
||||
if (this.lVal.eval()) {
|
||||
return true;
|
||||
}
|
||||
return this.rVal.eval();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "(" + this.lVal + " | " + this.rVal + ")";
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Cond neg() {
|
||||
return new And(lVal.neg(), rVal.neg());
|
||||
|
@ -28,6 +28,10 @@ public class Memo<T> extends Lazy<T> {
|
||||
return result;
|
||||
}
|
||||
|
||||
public <R, S> Memo<R> combine(Memo<? extends S> other, Combiner<? extends R, ? super T, ? super S> combiner) {
|
||||
return Memo.<R>from(() -> combiner.combine(this.get(), other.get()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public <R> Memo<R> transform(Immutator<? extends R, ? super T> f) {
|
||||
return Memo.<R>from(() -> f.invoke(this.get()));
|
||||
|
Loading…
Reference in New Issue
Block a user