next up previous contents index
: 述語 : フォーム : マクロ・フォーム   目次   索引

関数呼び出しのフォーム

リストのうち,第$1$要素が特殊フォームを表す記号でもマクロ記号でもないものは, 関数呼び出しのフォームである. その第$1$要素が関数を表わし,残りの要素が関数への実引数を表す.

(《関数式》《式$_1$$\cdots$《式$_n$》)

関数呼び出しにあたっては,まず 《関数式》 が評価される. その値は関数データでなければならない.次に 《式$_1$$\sim$ 《式$_n$》 が順に評価され, それらの値すべてが 《関数式》 の値である関数への実引数として渡されて 関数が呼び出される. 《式$_1$》 の値が第$1$引数, 《式$_n$》 の値が第$n$引数である. 関数呼び出し式の値は,呼び出された関数の返す値である.

例:

((car (cons + -)) 2 1) $\Rightarrow$ 3
((cdr (cons + -)) 2 1) $\Rightarrow$ 1
((lambda (x) ((if x car cdr) '(a . b))) #t) $\Rightarrow$ a
((lambda (x) ((if x car cdr) '(a . b))) #f) $\Rightarrow$ b

組み込み関数の引数の個数は関数ごとに規定されている. 例えば, consという組み込み関数の引数は$2$個であり, listは任意個の引数を受け取れる. もし規定された以外の個数の実引数が渡された場合はエラーとなる. したがって,次の関数呼び出しはいずれもエラーである.

(cons) $\Rightarrow$ エラー
(cons 1 2 3) $\Rightarrow$ エラー

同様に,ユーザの定義する関数の引数の個数も関数ごとに規定される. 例えば

(lambda (x y z)$\cdots$)

と定義された関数の引数は$3$個であり,

(lambda (x y . z)$\cdots$)

と定義された関数の引数は$2$個以上である. ユーザの定義する関数の場合も組み込み関数と同じで, 規定された以外の個数の実引数が渡された場合はエラーとなる. 次の関数呼び出しはいずれもエラーである.

((lambda (x y z)$\cdots$)) $\Rightarrow$ エラー
((lambda (x y z)$\cdots$) 1) $\Rightarrow$ エラー
((lambda (x y z)$\cdots$) 1 2) $\Rightarrow$ エラー
((lambda (x y z)$\cdots$) 1 2 3 4) $\Rightarrow$ エラー

((lambda (x y . z)$\cdots$)) $\Rightarrow$ エラー
((lambda (x y . z)$\cdots$) 1) $\Rightarrow$ エラー


next up previous contents index
: 述語 : フォーム : マクロ・フォーム   目次   索引
Tsuneyasu KOMIYA 平成14年2月22日