1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
|
use core:debug;
class Cons {
Int value;
Cons? next;
init(Int value) {
init() { value = value; }
}
init(Int value, Cons next) {
init() { value = value; next = next; }
}
init(Int value, Cons? next) {
init() { value = value; next = next; }
}
Str toS() {
if (next) {
value # ", " # next;
} else {
value.toS;
}
}
}
Cons create(Int len) {
if (len > 0) {
Cons(len, create(len - 1));
} else {
Cons(len);
}
}
Cons? append(Cons? a, Cons? b) {
if (a) {
?Cons(a.value, append(a.next, b));
} else {
b;
}
}
Cons? reverse(Cons? a) {
Cons? r;
if (a) {
r = append(reverse(a.next), Cons(a.value));
}
r;
}
void testReverse() {
Moment start;
reverse(create(3000));
print("Total time: " # (Moment() - start).inMs);
}
void fullReverse() {
for (Int i = 0; i < 100; i++)
testReverse();
}
|