#include struct Expr { int rank; ts::TPtr terms[2]; }; int depth(Expr e) { fprintf(stderr, "%d, ", e.rank); return 1+std::max(e.terms[0] ? depth(*e.terms[0]) : 0, e.terms[1] ? depth(*e.terms[1]) : 0); } tfun Expr re(int n) { Expr e; e.rank = ts::myRank; if (n > 0) { tval Expr t1 = re(n-1); tval Expr t2 = re(n-1); e.terms[0] = &t1; e.terms[1] = &t2; } return e; } tfun int main(int argc, char *argv[]) { assert(argc == 2); printf("depth=%d\n", depth(re(atoi(argv[1])))); return 0; }