;;; 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)))))