function 関数定義をオープンする
endfunction 関数定義を閉じる

## 説明

    function <lhs_arguments>=<function_name><rhs_arguments>
      <statements>
    endfunction

ただし,

<function_name>

  は関数の名前を意味します.

<rhs_arguments>

  は入力引数のリストを意味します.

  - `(x1,...,xm)`のように括弧で括った カンマ区切りの変数名の一覧となります. 最後の変数名はキーワード`varargin`と することも可能です (varargin 参照)

  - 関数に入力引数がない場合, `()` または 何も付けません.

<lhs_arguments>

  は出力引数のリストを意味します.

  - これは,`[y1,...,yn]`のように角括弧で括った カンマ区切りの変数名の一覧となります. 最後の変数名はキーワード `varargout` (varargout 参照)とすること が可能です.

  - 関数が出力引数を持たない場合,`[]` を指定します. この場合,構文を以下のようにすることも可能です: `function <function_name><rhs_arguments>`

<statements>

  Scilab命令(ステートメント)の集合を意味します. この構文は,インラインまたはスクリプトファイル(exec 参照)の中で 関数を定義する (functions 参照)ために使用できます. 古いバージョンのScilabとの互換性のため, function 定義のみを含むスクリプトファイルで定義された関数は, `exec`関数によりScilabに"ロードする"ことができます.

`function <lhs_arguments>=<function_name><rhs_arguments>` のシーケンスは複数の行に分割することができません. このシーケンスはカンマまたはセミコロンを終端に付けることにより, 同じ行に命令を続けることができます.

`<function_name>` は いくつかの構文規則に従う必要があることに注意してください (names参照).

function の定義はネストすることが可能です.

## 例

    //インライン定義 (function参照)
    function [x,y]=myfct(a,b)
    x=a+b
    y=a-b
    endfunction

    [x,y]=myfct(3,2)

    //1行で関数定義
    function y=sq(x),y=x^2,endfunction

    sq(3)

    //関数定義のネスト
    function y=foo(x)
    a=sin(x)
    function y=sq(x), y=x^2,endfunction
    y=sq(a)+1
    endfunction

    foo(%pi/3)

    // スクリプトファイル内での定義 (exec参照)
    exec SCI/modules/elementary_functions/macros/asinh.sci;

## 参照

- functions
- exec
- names

## 履歴

6.0.0 `function` and `endfunction` are now protected: Assignments like `function=1` or `endfunction=2` are no longer possible.