func expon(_, {.is_zero}) { 1 } func expon(base, exp {.is_neg}) { expon(1/base, -exp) } func expon(base, exp {.is_int}) { var c = 1 while (exp > 1) { c *= base if exp.is_odd base *= base exp >>= 1 } return (base * c) } say expon(3, 10) say expon(5.5, -3)