Functions
Named Functions
You define functions using the defun
macro:
(defun fib (n)
"Return the nth Fibonacci number."
(if (< n 2)
n
(+ (fib (- n 1))
(fib (- n 2)))))
And call them like you call anything else:
CL-USER> (fib 30)
832040
Anonymous Functions
Application
Functions can be called indirectly using funcall
:
CL-USER> (funcall #'fib 30)
832040
Or with apply
:
CL-USER> (apply #'fib (list 30))
832040
Multiple Return Values
(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
We can also use multiple-value-bind
to assign each return value to a
variable:
CL-USER> (multiple-value-bind (first second third)
(many 2)
(list first second third))
(2 4 6)