Next: 7.1 仮引数の宣言
Up: ソフトウェア第三 講義資料 Lisp, リスト処理,集合
Previous: 6 Lispの式の評価:eval
関数は,関数名の後の引数をすべて順に評価(eval)し,その評価した値に対し
て関数演算を行います.
関数には,あらかじめ組み込まれているものと,ユーザが新たに定義するもの
があります.組み込まれているものは,処理系により変ってきます.
関数はシンボルにひとつ定義できます.シンボルには変数としての値と,関数
定義の両方を持たせることができます.
関数定義の構文は,
(defun 関数名 (仮引数 ...仮引数)
式 ... 式)
という形になります.関数定義は,関数名を先頭にもつフォームによって
呼び出すことができます.
シンボルには変数としての値と,関数
定義の両方を持たせることができます.そのシンボルが変数としてよく使われ
るものであっても関数名としても用いてもよくなっています.
関数のフォームがEVALされる時には,関数フォームへの実引数が順に評価され
ます.そして,その値が順に仮引数に渡され,その仮引数の環境のもとで,式
が順に評価され,最後の式の値がこの関数評価の結果となります.
この仮引数に利用される変数名は,この関数本体の中だけで利用できるもので,
スコープ(scope)がこの本体であるというようにいわれます.
この仮引数の変数のように,スコープが限定されている変数を局所変数(local
variable)といい,そうでない変数は大域変数(global variagle)といいます.
<cl> (defun test (a) a)
test
<cl> (test 1)
1
<cl> (defun fib (n)
(if (< n 2) 1
(+ (fib (1- n)) (fib (- n 2)))))
<cl> (fib 19)
6765
<cl> (time (fib 19))
cpu time (non-gc) 13134 msec user, 617 msec system
cpu time (gc) 483 msec user, 0 msec system
cpu time (total) 13617 msec user, 617 msec system
real time 14453 msec
6765
generated through LaTeX2HTML. M.Inaba 平成18年5月7日