コレが非常に難しいです。でも2種類しかないです。
ユーザの作るほうは「アクション」と呼ばれます。
また、アクションには、「標準アクション」という言語レベルで予約されたアクションがあります。
ユーザは函数を「作れない」と思ってかまいません。
アクションを函数のように使用することで我慢します。
さて、函数をかけないとはどのようなことでしょうか。
アクションと函数の明確な違いは、C言語でいうならば、戻り値があるかどうかに収束するでしょう。
つまり、ユーザは戻り値のある函数を作成できません。
アクションで行った結果を取得するには、変数で渡すしかありません。
変数はすべてグローバル変数なので特別な処理は必要ではありませんが。
C言語でいうところの「プロトタイプ宣言」はありません。
コレによって「前方参照」で対応しなければなりません。