racket/collects/honu/examples/old/Integer-old.honu
Stevie Strickland 7dbb99d3c6 merged 292:296 from branches/sstrickl
svn: r297
2005-07-02 04:03:02 +00:00

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;
}