//函数定义 
 
 
 
函数参数) 
 
 
 
函数描述" 
 
 
 
body-form*函数体) 
  
 
 

   函数名称风格frob-widget 
 
 
 

   函数描述:(documentation 'foo 'function)获取foo函数的描述 
 
 
 

   函数体由任意数量的lisp表达式构成,在函数被调用时依次求值,最后一个表达式的值作为整个函数值返回,另外RETRUN-FORM特殊操作符可用于从函数的任意位置立即返回。 
 
 
 

   //可选形参 
 
 
 

   (defun foo(a b &optional c d) (list a b c d)) 
 
 
 

   前两个参数必须有。 
 
 
 

   //默认值 
 
 
 

   b参数默认值等于10  
 
 
 

   (defun foo(a &optional (b 10)) (list a b)) 
 
 
 

   b参数默认值等于a 
 
 
 

   (defun foo(a &optional (b a)) (list a b)) 
 
 
 

   b是否取默认值,取默认值则b-supplied-p为nil,否则为t 
 
 
 

   (defun foo(a &optional (b b-supplied-p)) (list a b b-supplied-p)) 
 
 
 

   //剩余形参 &rest 
 
 
 

   (defun format(stream string &rest values) ...) 
 
 
 

   //关键字形参 &key 
 
 
 

   (defun foo(&key a b c) ...) 
 
 
 

   (foo :a 1) 
 
 
 

   (foo :c 1 :b 4) 
 
 
 

   内外不同形式: 
 
 
 

   (defun foo(&key ((:apple a) 0)) (list a 1)) 
 
 
 

   (foo :apple 10) 
 
 
 

   //获取函数对象(function foo)或#'foo 
 
 
 

   //调用函数对象(foo 1 2)=(funcall #'foo 1 2) ;确切知道实参数个数 
 
 
 

   (apply #'foo data) (apply #'foo 10 data);data是一个列表,不确定参数个数。 
 
 
 

   //注释规则 
 
 
 

   ;;;; 文件头注释 
 
 
 

   ;;;大段代码注释 
 
 
 

   (defun foo(x) 
 
 
 

     (dotimes (i x) 
 
 
 

       ;; 接下来代码的注释 
 
 
 

       xxx    ;行尾注释 
 
 
 

       xxx))