next up previous
Next: 7.1 仮引数の宣言 Up: ソフトウェア第三 講義資料 Lisp, リスト処理,集合 Previous: 6 Lispの式の評価:eval

7 関数

関数は,関数名の後の引数をすべて順に評価(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日