//函数定义
(defun name(parameter*函数参数)
"Optional documentation string.函数描述"
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))