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; | ![]() | ![]() |