cartesian_product SciMax Toolbox cauchysum

SciMax Toolbox >> catch

catch

Maxima Function

Calling Sequence

catch (expr_1, ..., expr_n)

Description

Evaluates expr_1, ..., expr_n one by one; if any leads to the evaluation of an expression of the form throw (arg), then the value of the catch is the value of throw (arg), and no further expressions are evaluated. This "non-local return" thus goes through any depth of nesting to the nearest enclosing catch. If there is no catch enclosing a throw, an error message is printed.

If the evaluation of the arguments does not lead to the evaluation of any throw then the value of catch is the value of expr_n.

(%i1) lambda ([x], if x < 0 then throw(x) else f(x))$
(%i2) g(l) := catch (map (''%, l))$
(%i3) g ([1, 2, 3, 7]);
(%o3)               [f(1), f(2), f(3), f(7)]
(%i4) g ([1, 2, -3, 7]);
(%o4)                          - 3

The function g returns a list of f of each element of l if l consists only of non-negative numbers; otherwise, g "catches" the first negative element of l and "throws" it up.

cartesian_product SciMax Toolbox cauchysum