2 single: 関数 - 第一形式; はじめに
27 pair: 関数 - 第一形式; 関数の定義
43 .. note:: 関数の定義において end キーワードはオプション扱いです。
51 see "Hello from function" + nl
55 pair: 関数 - 第一形式; 関数の呼び出し
60 仮引数を指定せずに関数を呼び出すには、関数名末尾に () を入力します。
62 .. tip:: 関数の定義、および関数のコードの記述前に関数を呼び出せます。
71 see "Hello from function" + nl
80 func first see "message from the first function" + nl
82 func second see "message from the second function" + nl
85 pair: 関数 - 第一形式; 仮引数の宣言
90 関数へ仮引数を宣言するには、関数名末尾に仮引数リストとしてカンマで区切った
101 pair: 関数 - 第一形式; 仮引数の送信
106 関数へ仮引数を送信するには、関数名末尾に () の内側で仮引数を入力します。
123 sum(3,5) sum(1000,2000)
125 func sum x,y see x+y+nl
128 pair: 関数 - 第一形式; Main 関数
133 Ring では、 Main (メイン) 関数はオプション扱いです。 Main 関数が定義された場合は、
134 ほかのステートメント実行後にメイン関数が実行されます。
136 ほかのステートメントが存在しない場合に限り、メイン関数は最初の `エントリーポイント <https://ja.wikipedia.org/wiki/エントリーポイント>`_ となります。
142 # このプログラムは、 Hello World メッセージを表示した後にメイン関数を実行します。
144 See "Hello World!" + nl
147 see "Message from the main function" + nl
150 pair: 関数 - 第一形式; 変数のスコープ
155 Ring は変数のスコープの決定で `静的スコープ <https://ja.wikipedia.org/wiki/静的スコープ>`_ を使用します。
157 関数の内側で定義される変数は、ローカル変数になります (関数の仮引数も該当します)。
158 関数の外側で定義される変数は、グローバル変数になります (関数の前にあるのは全て該当します)。
160 この関数内で定義されたグローバル変数は、別の関数内にある変数としてもアクセスできます。
166 # このプログラムでは 1 ~ 10 までの数値を表示します。
168 x = 10 # x はグローバル変数です。
172 for t = 1 to 10 # t はローカル変数です。
173 mycounter() # 関数の呼び出し
177 see x + nl # グローバル変数の値を表示します。
181 .. note:: for ループの変数 t をローカル変数として宣言する前に、 Main 関数を使用してください。
182 つまり、新しい変数のスコープをローカルとして設定するために、命令を直接入力するのではなく、
183 Main 関数では自動的にローカルとして設定することが推奨されます。
191 Return 命令は、関数の値を返します。
199 .. tip:: Return 命令の後にある式はオプションであり、
200 Return 命令で値を返さずに関数の実行を終了することもできます。
202 .. note:: 関数が明示的な値を返さない場合は、 NULL (空の文字列 = \"\") を返します。
209 See "the function doesn't return a value" + nl
215 pair: 関数 - 第一形式; 再帰処理
220 Ring は `再帰 <https://ja.wikipedia.org/wiki/再帰>`_
221 に対応しており、異なる引数を使用して関数が関数自身を再帰的に呼び出せます。
227 see fact(5) # 実行結果 = 120
229 func fact x if x = 0 return 1 else return x * fact(x-1) ok