内部関数定義

 DEF文では数式で書ける関数しか定義できないが,関数定義の構文を利用すると,プログラムを用いて関数の計算手順を定義することができる。
 内部関数定義は,プログラム単位の内側に書く関数定義。引数以外の変数やDATA文などをプログラム単位で共有する。
 内部関数定義は,FUNCTION行で始まりEND FUNCTION行で終わる。その名の通り,いずれかのプログラム単位の内部に書かなければならない。
FUNCTION行には,関数名と,もし,存在すれば引数を括弧で括って書く。引数が複数ある場合は,コンマで区切る。関数名の付け方は,数値関数であれば,数値変数と,文字列関数であれば文字列変数と同じ。
関数定義では,関数値を決定するために関数名に対する代入の形をとるLET文を用いる。
例 (主プログラムに含まれる内部関数定義)

10 FUNCTION P(n,r)
20    LET a=1
30    FOR k=1 TO r
40       LET a=a*(n-k+1)
50    NEXT k
60    LET P=a
70 END FUNCTION 
80 PRINT P(8,3)
90 END

10行から70行までの部分で関数Pを定義している。
10行の(n,r)を仮引数という。
関数定義部で関数値を決定するために60行のような形式のLET文を用いる。等号の左辺には関数名のみを書くことに注意。

80行で関数Pを利用している。この場合の(8,3)を実引数という。

◇ 内部関数定義では仮引数以外の変数はプログラム単位の変数と共通。

<Note> 左辺が関数名であるLET文を関数定義let文という。十進モードのとき,関数定義let文では,通常のlet文と異なり,右辺の数値式の結果を15桁に丸めることをしない。

<Note> 内部関数定義は,関数を引用するより手前に書く。
 もし定義部を関数の引用より後に書く場合は,DECLARE FUNCTION文で関数名をあらかじめ宣言する。
例 

100 DECLARE FUNCTION P
110 PRINT P(8,3)
120 FUNCTION P(n,r)
130    LET a=1
140    FOR k=1 TO r
150       LET a=a*(n-k+1)
160    NEXT k
170    LET P=a
180 END FUNCTION 
190 END