59 lines
910 B
Plaintext
59 lines
910 B
Plaintext
type Integer {
|
|
init();
|
|
|
|
Integer pred;
|
|
|
|
Integer succ();
|
|
Integer plus(Integer y);
|
|
Integer times(Integer y);
|
|
}
|
|
|
|
class Zero : Integer imp Integer {
|
|
init() {
|
|
my.pred = this;
|
|
}
|
|
|
|
Integer pred;
|
|
|
|
Integer plus(Integer y) {
|
|
return y;
|
|
}
|
|
|
|
Integer times(Integer y) {
|
|
return this;
|
|
}
|
|
|
|
Integer succ() {
|
|
Integer that = new Positive : Integer();
|
|
that.pred = this;
|
|
return that;
|
|
}
|
|
|
|
export Integer : pred as pred, plus as plus, times as times, succ as succ;
|
|
}
|
|
|
|
class Positive : Integer imp Integer {
|
|
|
|
init() {
|
|
my.pred = null;
|
|
}
|
|
|
|
Integer pred;
|
|
|
|
Integer plus(Integer y) {
|
|
return pred.plus(y.succ());
|
|
}
|
|
|
|
Integer times(Integer y) {
|
|
return pred.times(y).plus(y);
|
|
}
|
|
|
|
Integer succ() {
|
|
Integer that = new Positive : Integer();
|
|
that.pred = this;
|
|
return that;
|
|
}
|
|
|
|
export Integer : pred as pred, plus as plus, times as times, succ as succ;
|
|
}
|