next up previous
Next: 2.3 手続きを引数とする手続きの定義と実行例 Up: 2 インタプリタの実行例 Previous: 2.1 関数の定義

2.2 再帰関数の定義

再帰関数も同様に定義可能です.

==> (set! fact (lambda (n)
                  (if (= n 0) 1
                      (* n (fact (- n 1))))))
(EXCL::.LEXICAL-CLOSURE.
 (LAMBDA (&REST ARGS)
    (INTERP CODE (NCONC (MAPCAR (FUNCTION LIST)
                                 VARS ARGS) ENV)))
 ((CODE BEGIN (IF (= N 0)
              1 (* N (FACT (- N 1)))))
  (VARS N) (ENV)
  (PARAMS (N) (IF (= N 0) 1 (* N (FACT (- N 1)))))
  (NAME . LAMBDA))
 NIL
 ((SCHEME-SPECIAL-FORM-INTERP . EXCL::INVALID)) NIL) 

==> (fact 5)
120


generated through LaTeX2HTML. M.Inaba 平成18年5月6日