Type-Checking Predicates
(numberp 2) ; t (numberp 'a) ; nil (listp '(1 2 3)) ; t (functionp '+) ; t
Example
(defun plus-maybe (n m) (let ((r 0)) (if (numberp n) (setq r (+ r n))) (if (numberp m) (setq r (+ r m))) r)) (plus-maybe 3 8) ; 11 (plus-maybe 3 'a) ; 3 (plus-maybe '(2 3 9) 4) ; 4 (plus-maybe 'a 'b) ; 0
Optional Parameters
(defun fname (required-args &optional args &rest arg)
Example
(defun fun (a b c &optional d e &rest f) ...)
(defun my-make-list (length &optional init &rest endlist) "Creates a list by making length copies of init and appending endlist to it afterwards. If the init is missing the list is filled with 0s." (let ((L nil)) (setq L (if init (make-list length init) (make-list length 0))) (append L endlist))) (my-make-list 4 2 7 8) ; (2 2 2 2 7 8) (my-make-list 5) ; (0 0 0 0 0) (my-make-list 3 0 1 1) ; (0 0 0 1 1) (defun my-print (&rest L) "Prints any number of arguments with princ and returns true." (mapc 'princ L) t) ; my-print (my-print "hello world " 1 " " 2 " n= " 4 "\n") ; hello world 1 2 n= 4 ; t (defun plus (&rest L) (apply '+ L)) ; plus (plus 1 2 3) ; 6
Explicit Function Invocation
(funcall function arguments) (apply function (list-of-arguments)) (setq f (lambda (x y) (* x y))) ; (lambda (x y) (* x y)) (funcall f 2 5) ; 10 (apply f '(2 5)) ; 10 (apply '+ '(1 2 3)) ; 6 (funcall '+ 1 2 3) ; 6