;;; DEFUN provides a Scheme-like function defining facility, ;;; which doesn't require the explicit use of a LAMBDA. Thus: ;;; ;;; (defun (FACTORIAL X) ;;; (if (= x 0) ;;; 1 ;;; (* x (factorial (- x 1))))) ;;; (define DEFUN (mlambda [call] '(define ,(pproc (arg 1 call)) (lambda . ,(cons (pargs (arg 1 call)) (rest (pargs call))))))) ;;; FUN, like define, obviates the need for an explicit ;;; lambda; it can be used with recursive names. Thus: ;;; ;;; (fun (INCREMENT x) (+ x 1)) ;;; ;;; designates the increment function; similarly, ;;; ;;; ((fun (FACTORIAL x) ;;; (if (= x 0) ;;; 1 ;;; (* x (factorial (- x 1))))) ;;; 6) ;;; ;;; designates 720 (define FUN (mlambda [call] '(letrec [[,(pproc (arg 1 call)) (lambda . ,(cons (pargs (arg 1 call)) (rest (pargs call))))]] ,(pproc (arg 1 call)))))