## `return` -- exit a procedure

#### Introduction

`return(`x`)` terminates the execution of a procedure and returns `x`.

#### Call(s)

`return(x)`

#### Parameters

`x` | - | any MuPAD object

#### Returns

x.

#### Related Functions

`DOM_PROC`, `proc`, `->`

#### Details

- Usually, MuPAD ends a procedure when all statements of the procedure body were processed. In this case, the return value of the procedure is the result of the last statement that was executed.

  Alternatively, the call `return(`x`)` inside a procedure leads to immediate exit from the procedure: `x` is evaluated and becomes the return value of the procedure. Execution proceeds after the point where the procedure was invoked.

- `x` may be an expression sequence, i.e., calls such as `return(`x1, x2, ...`)` are allowed.
- `return(``)` returns the void object of type `DOM_NULL`.
- Note that `return` is a function, not a keyword. A statement such as `return x;` works in the programming language C, but causes a syntax error in MuPAD.
- If called outside a procedure, `return(`x`)` just returns `x`.
- `return` is a function of the system kernel.

#### Example 1

This example shows the implementation of a maximum function (which, in contrast to the system function `max`, accepts only two arguments). If `x` is larger than `y`, the value of `x` is returned and the execution of the procedure `mymax` stops. Otherwise, `return(`x`)` is not called. Consequently, `y` is the last evaluated object defining the return value:

    >> mymax := proc(x : Type::Real, y : Type::Real)
       begin
          if x > y then
            return(x)
          end_if;
          y
       end_proc:

    >> mymax(3, 2), mymax(4, 5)

                                       3, 5

    >> delete mymax:

#### Example 2

`return(``)` returns the void object:

    >> f := x -> return(): type(f(anything))

                                     DOM_NULL

    >> delete f:

#### Example 3

If `return` is called on the interactive level, the evaluated arguments are returned:

    >> x := 1: return(x, y)

                                       1, y

    >> delete x:

#### Changes

- no changes

Do you have questions or comments?
Copyright © SciFace Software GmbH & Co. KG 2000