pub fn depth_traverse<F, T, E>(
    expr: &SymbolicExpression,
    visit: F
) -> Result<T, E> where
    F: FnMut(&SymbolicExpression) -> Result<T, E>,