Remove factorial implementation, map to gamma + 1 instead via .default
List.prototype.map, maps inner expressions, and then re-applies the operator
experiment: try to simplify some of the functions which need to know whether something is imaginary, real, or positive.