リストのうち,第要素が特殊フォームを表す記号でもマクロ記号でもないものは,
関数呼び出しのフォームである.
その第
要素が関数を表わし,残りの要素が関数への実引数を表す.
(《関数式》《式》
《式
》)
関数呼び出しにあたっては,まず 《関数式》 が評価される.
その値は関数データでなければならない.次に
《式》
《式
》 が順に評価され,
それらの値すべてが 《関数式》 の値である関数への実引数として渡されて
関数が呼び出される.
《式
》 の値が第
引数,
《式
》 の値が第
引数である.
関数呼び出し式の値は,呼び出された関数の返す値である.
例:
((car (cons + -)) 2 1)3
((cdr (cons + -)) 2 1)1
((lambda (x) ((if x car cdr) '(a . b))) #t)a
((lambda (x) ((if x car cdr) '(a . b))) #f)b
組み込み関数の引数の個数は関数ごとに規定されている.
例えば, consという組み込み関数の引数は個であり,
listは任意個の引数を受け取れる.
もし規定された以外の個数の実引数が渡された場合はエラーとなる.
したがって,次の関数呼び出しはいずれもエラーである.
(cons)エラー
(cons 1 2 3)エラー
同様に,ユーザの定義する関数の引数の個数も関数ごとに規定される. 例えば
(lambda (x y z))
と定義された関数の引数は個であり,
(lambda (x y . z))
と定義された関数の引数は個以上である.
ユーザの定義する関数の場合も組み込み関数と同じで,
規定された以外の個数の実引数が渡された場合はエラーとなる.
次の関数呼び出しはいずれもエラーである.
((lambda (x y z)))
エラー
((lambda (x y z)) 1)
エラー
((lambda (x y z)) 1 2)
エラー
((lambda (x y z)) 1 2 3 4)
エラー
((lambda (x y . z)))
エラー
((lambda (x y . z)) 1)
エラー