関数



  1. 関数定義
    関数定義は、以下の形をしています。
            fun func_name(arg1, arg2,...,argN){
    require: [statement list];
    var: [symbol list];
    do: [statement list];
    ensure: [statement list];
    rescue: [statement list];
    };
          require: には、関数の事前条件の並び、
    var: には、変数名(シンボル)のリスト、
    do: には、関数本体(実際に実行される文)の並び、
    ensure: には、事後条件の並び、
    rescue: には、関数本体や事後条件内で例外が起きた時に実行される文の並び
    を定義する。




  例。
      fun square(x){do: [x * x];}; /* 二乗を計算する関数squareの定義 */

   fun func2(x,y){    /* 関数自体にはたいして意味はない */
        var: [n,m],   /* ローカル変数の宣言 */
        do: [
          n = x + y;
          m = x * y;
          n - m      /* n - m の値がが関数の戻り値 */
        ];
      };


 また、関数を実行するには、関数に引数を並べた
タプルを送ります。

  例。
      func ();

      square (4);

      someFunction (2,7);


 2引数の関数に引数を1個しか渡さなかった場合、
エラーにはならず、最初の引数に渡した値が結び付けられた、
1引数の関数が返ります。
 一般に複数の引数をとる関数に、少ない引数しか
渡さなかった場合は、渡したぶんの引数のみ、値が結びつけられた
関数(クロージャ)が返ってきます。

  例。
      g = func2 7;  /* g は、1引数の関数 */
      g 8;          /* 関数の値は、-41 */