функции Scilab-процедуры и Scilab-объекты

## Описание

Функции являются процедурами Scilab ("макрос", "функция" и "процедура" имеют одно и то же значение).

## Определение функции

Обычно они определяются в файлах с помощью редактора и загружаются в Scilab, используя функцию exec или через библиотеку (см. lib либо genlib). Однако, они также могут быть определены во время исполнения программы (см. deff либо function). Функция определяется двумя составляющими:

- часть "синтаксис определения", как например:

      function [y1,...,yn]=foo(x1,...,xm)
      function [y1,...,yn,varargout]=foo(x1,...,xm,varargin)

- ряд Scilab-инструкций.

Строка "синтаксиса определения" указывает "полный" синтаксис вызова этой функции. `yi` - выходные переменные, вычисленные в зависимости от входных переменных `xi` и переменные, существующие в Scilab'е в момент исполнения функции.

## Вызов функции

- Обычно синтаксис вызова функции следующий: `[y1,...,yn]=foo(x1,...,xm)`. Можно использовать более короткий список входных или выходных аргументов, чем определённый. В таких случаях используются или устанавливаются только самые первые переменные, начиная слева.

  Функция argn может быть использована для получения фактического количества аргументов при вызове.

- Можно определять функцию с неопределённым максимальным количеством входных или выходных аргументов. Это можно сделать, используя ключевые слова varargin и varargout.

- Также можно использовать "именованный аргумент" для определения входных аргументов: предположим, что функция `fun1`, определённая как `function y1 = fun1(x1, x2, x3)`, тогда её можно вызвать следующим синтаксисом: `y = fun1(x1=33, x3=[1 2 3])`; внутри `fun1` переменная `x2` не будет определена.

  Её можно также вызвать следующим синтаксисом: `y = fun1(x1=33, y='foo')`. В таком случае переменная `y` будет доступна в контексте функции `fun1`.

  Обратите внимание, что максимальное количество аргументов должно быть меньше или равно числу формальных входных аргументов, используемых в части синтаксиса функции.

  Проверить определены ли переменные можно с помощью функции exists.

- Когда у функции нет аргументов слева и она вызывается только с аргументами символьных строк, синтаксис вызова может быть упрощён:

      fun('a','toto','a string')

  что эквивалентно:

      fun a toto 'a string'

## Прочие вопросы

Функции являются Scilab-объектами (с номерами типа 13 или 11). И ими можно управлять (создавать, сохранять, загружать, передавать в качестве аргументов, и т. д.) как и другими типами переменных.

Коллекции функций можно собирать в библиотеки. Функции, которые начинаются со знака `%` (например, `%foo`) часто используются чтобы перегрузить (см. перегрузку) операции или функции для нового типа данных.

Заметьте, что имя функции должно удовлетворять некоторым правилам синтаксиса (см. имена).

## Примеры

    //определение встраиваемой функции (см. function)
    function [x,y]=myfct(a,b)
      x=a+b
      y=a-b
    endfunction
    [x,y]=myfct(3,2)

    //определение встраиваемой функции (см. deff)
    deff('[x,y]=myfct(a,b)',['x=a+b';
                             'y=a-b'])

    // определение в ASCII-файле (см. exec)
    exec SCI/modules/elementary_functions/macros/asinh.sci;

## Смотрите также

- function
- deff
- exec
- lib
- getd
- genlib
- exists
- varargin
- varargout
- имена