class LetExpr extends Expr { IdExpr id; Expr rhs; Expr body; Value eval(/* Expr this */) { Value v = this.rhs.eval(); Expr ePrime = this.body.subst( this.id, v ); return ePrime.eval(); } Expr subst( /* LetExpr this */ IdExpr id, Value v ) { return new LetExpr( this.id, this.rhs.subst(id,v), this.body.subst(id,v) ); } }