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