Go to the first, previous, next, last section, table of contents.

### ユーザ定義函数

ユーザによる函数の定義は ``def'` 文で行う. 文法エラーは読み込み時に ある程度チェックされ, おおよその場所が表示される. 既に(引数の個数に関係なく)同名の函数が定義されている場合には, その函数は再定義される. `ctrl()` 函数により `verbose` フラグ が on になっている場合,

    afo() redefined.

というメッセージが表示される. ある函数の定義において, まだ未定義の函数 を呼び出していても, 定義時にはエラーにならない. 実行時に未定義の函数 を呼び出そうとした場合にエラーとなる.

    def f(X) {
        if ( !X )
            return 1;
        else
            return X * f(X-1);
    }

    def c(N)
    {
        A = newvect(N+1); A[0] = B = newvect(1); B[0] = 1;
        for ( K = 1; K <= N; K++ ) {
            A[K] = B = newvect(K+1); B[0] = B[K] = 1;
            for ( P = A[K-1], J = 1; J < K; J++ )
                B[J] = P[J-1]+P[J];
            }
        return A;
    }

    def add(A,B)
    "add two numbers."
    {
        return A+B;
    }

2 つ目の例では, 長さ `N+1` のベクトル (`A`とする) が返される. `A[I]` は長さ `I+1` の配列であり, そのそれぞれの要素が を要素とする配列である.

3 つ目の例では, 引数並びのあとに文字列が置かれているが、これは Emacs-Lisp の関数定義に類似の機能で、ヘルプ用の文字列である。 この例の場合、`help(add)` によってこの文字列が出力される。

`参照`
  section `help`.

以下では, C によるプログラミングの経験がない人のために, Asir 言語 によるプログラムの書き方を解説する.

Go to the first, previous, next, last section, table of contents.