函数

命名函数

使用 defun 宏定义函数

(defun fib (n)
  "Return the nth Fibonacci number."
  (if (< n 2)
      n
      (+ (fib (- n 1))
         (fib (- n 2)))))

像调用其他任何东西一样调用它们

CL-USER> (fib 30)
832040

匿名函数

应用程序

可以使用 funcall 间接调用函数

CL-USER> (funcall #'fib 30)
832040

或使用 apply

CL-USER> (apply #'fib (list 30))
832040

多个返回值

(defun many (n)
  (values n (* n 2) (* n 3)))
CL-USER> (multiple-value-list (many 2))
(2 4 6)

CL-USER> (nth-value 1 (many 2))
4

我们还可以使用 multiple-value-bind 将每个返回值分配给一个变量

CL-USER> (multiple-value-bind (first second third)
             (many 2)
           (list first second third))
(2 4 6)