# 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 の定義はネストすることが可能です.

## 例

    //inline definition (see function)
    function [x,y]=myfct(a,b)
    x=a+b
    y=a-b
    endfunction

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

    //行内での関数定義
    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
- exec