## ルール

### 定義

ルールは他のプログラミング言語の関数に相当する機能である。

    # ルールrule_aを定義する
    rule rule_a
    {
    }

ルールの戻り値はreturn文で設定する。

    #「a」、「b」、「c」のリストを返すルール
    rule rule_b
    {
        return a b c ;
    }

ルール名に続く括弧内で仮引数を持たせることができる。

    # 二つの文字列aとbを引数にとるルール
    rule rule_c ( a b )
    {
    }

    # 任意サイズのリストaと空でないリストbとオプションの文字列cを引数に取るルール
    rule rule_d ( a * : b + : c ? )
    {
    }

### 呼び出し

ルール名に続き、定義にマッチした引数を並べるとルールを呼び出すことができる。

    rule rule_c ( a b )
    {
    }

    rule_c 1 2 ; # a = 1 , b = 2

    rule rule_d ( a * : b + : c ? )
    {
    }

    rule_d 1 2 : 1 2 : 1 ; # a = 1 2 , b = 1 2 , c = 1
    rule_d : 1 ; # a = , b = 1 , c =

戻り値を利用したい場合は、ルール呼び出しを「[」と「]」で囲む。

    rule rule_e ( a b )
    {
        return $(a)-$(b) ;
    }

    X = [ rule_e x y ] ; # X = x-y