Scilab Home page | Wiki | Bug tracker | Forge | Mailing list archives | ATOMS | File exchange
Please login or create an account
Change language to: English - Français - Português - 日本語
Справка Scilab >> Функции > функции

функции

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 — library definition
  • getd — загрузка всех функций, определённых в директории
  • genlib — build library from functions in given directory
  • exists — проверяет существование переменной
  • varargin — переменное число аргументов в списке входных аргументов
  • varargout — переменное число аргументов в списке выходных аргументов
  • имена — синтаксис имён в Scilab
Scilab Enterprises
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Tue Feb 14 15:13:37 CET 2017