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

63 lines
1.2 KiB
Plaintext

type Integer {
int value;
Integer succ();
Integer plus(Integer y);
Integer times(Integer y);
}
class Zero() : Integer impl Integer {
int value = 0;
Integer plus(Integer y) {
return y;
}
Integer times(Integer y) {
return (this : Integer);
}
Integer succ() {
return new Positive : Integer(pred = (this : Integer));
}
export Integer : value, plus, times, succ;
}
class Positive() : Integer impl Integer {
init Integer pred;
int value = pred.value + 1;
Integer plus(Integer y) {
return pred.plus(y.succ());
}
Integer times(Integer y) {
return pred.times(y).plus(y);
}
Integer succ() {
return new Positive : Integer(pred = (this : Integer));
}
export Integer : value, plus, times, succ;
}
Integer main() {
Integer zero = new Zero : Integer();
Integer one = new Positive : Integer(pred = zero);
Integer two = new Positive : Integer(pred = one);
Integer three = one.plus(two);
Integer four = two.times(two);
Integer five = four.plus(one);
Integer six = two.plus(four);
Integer seven = one.plus(two.plus(four));
Integer eight = two.times(two);
Integer nine = three.times(three);
return nine.plus(one);
}