日本語プログラミング言語「あさやけ」リファレンス

2, 関数の基礎

関数

関数とは、モジュール化のための手段です。エントリーポイントを作成するために最低一個以上プログラム内に必要です。 このため、関数は言語の中では比較的重要な概念です。
宣言構文および呼び出し構文は次のようになります:

テスト関数{※呼び出される実際の内容
	「テスト関数」を出力。
}

エントリーポイント{
	テスト関数。※呼び出し
	テスト関数()。※ていねいな呼び出し
}

この例ではただ関数が呼び出されるだけですが、戻り値や引数ももちろん指定できます。
関数の順序依存性はありません。実装系は意味解析をすべての関数の語句解析が終わった後にする必要があります。
情報の伝達も含めた関数の例は次の通りです:

文字列 テスト関数(文字列 あを、整数 いで){
	文字列 戻り値。
	戻り値は あ+「(」+い+「)」+改行。
	戻り値を出力。
	戻り値で戻る。
}

エントリーポイント{
	1で「The Test」をテスト関数。 // "The Test 1"
	テスト関数(2で「The Test」を)。 // "The Test 2"
	テスト関数(「The Test」、3)を出力。 // "The Test 3"×2
}

情報の保持をするものを変数としています。
上の例では関数の定義で助詞を指定しています。呼び出し側で指定された助詞と、 呼び出される側で指定された助詞は完全に一致しなければエラーになります。 (ただし、助詞「に」は助詞「へ」のエイリアスです。)
助詞が一致していれば順序は関係ありません
また、値をカンマで区切った、プログラミングの世界で標準的な呼び出し方は、助詞指定のある関数も、ない関数も呼び出すことが 可能です。助詞指定のある関数をこの方法で呼び出す場合は、宣言での順序が呼び出しの引数の順序になり、 助詞は無視されます。逆に、助詞指定の無い関数を助詞付きで呼び出すことはできません。
戻り値は型を関数名の前に、値の変換は戻る構文で行います。戻る構文の後の文は当然実行されません。 実装系は戻る構文以降の文を実行してはいけませんし、構文解析の段階でエラーとするべきです。 戻り値は無くても構いません。戻り値の型の指定があっても関数内で戻る構文が無い場合は、その型の 初期値が返されます。
助詞の一覧は次の通りですが、追加することもできます。(追加方法は仕様策定中):

助詞一覧
助詞目的
へ、に対象・方向・目標を指定する場合。コンソールへ「本日は晴天なり。」を書き込む。
処理の中心となる値を渡す場合。「本日は晴天なり。」を出力。
値を3で割る。
処理に使う補助的な値を渡す場合。
からすでにあるものに対して読み出しなどを行う場合。保存先ファイルから読み出す。

高度な呼び出し

日本語風に関数を呼び出す場合、接続詞「して」を使って関数の処理をつなげて書くことができます。
接続詞でつなげた場合、2つ目以降の関数の呼び出しには、その1つ前の関数の戻り値が、 グローバルシステム変数「それ」に代入されます。 通常の関数の戻り値は「それ」には代入されません(効率性のため)。
この仕組みを支援するのはグローバルユーザー変数「どこか」です。この変数は実装系が 自由型(変数の項参照)として定義しておく必要があります。
「して」「それ」「どこか」をうまく使いこなすことで、日本語らしいコードを書くことができます。
接続詞を使った関数の呼び出し例です:

エントリーポイント{
	文字列 バッファ。
	どこかへ入力して、それをバッファへ代入。
	バッファを出力。
}

今まではすべての引数を入力しなければいけませんでした。これは多少面倒です。 そこで、コードの効率性のためのデフォルト引数というものを使います。 これは、関数の宣言側に、引数を省略できるようにあらかじめ用意された値を置くことで、 呼び出し側で引数を省略できるというものです。
デフォルト引数を用いた関数の宣言は次のようになります:

省略出力(文字列 内容(「省略されました」)を、文字列 詳細(「特になし」)で){
	「出力内容: {内容}{改行}(詳細: {詳細}){改行*2}」を出力。
}

エントリーポイント{
	省略出力。
	「2回目の出力です。」を省略出力。
	「特に意味はありません。」で省略出力。
	「計4回です。」で、「最後の出力です。」を出力。
}

上の四つの呼び出しは、すべて同じ二つの引数を受け取る関数を呼び出しています。 他の言語と違い、助詞が使用できるために、順番にとらわれずにデフォルト引数を使用することができます。 (ただし、助詞を使わない場合は、順番どおりに省略する必要があります。 カンマ区切り呼び出しの場合は、デフォルト引数の後に引数を付け加える場合、その引数はデフォルト引数でなければ いけません。また、呼び出し側では、普通の引数ではさんだ一部だけ省略するということもできません。)