Jeśli zaś F desygnuje makro, zostanie ono rozszerzone rekursywnie, aż zostaną jedynie specjalne formy i wywołania funkcji.
Definiowanie funkcji Makro defun służy do definiowania funkcji. Definicja zawiera nazwę funkcji, nazwy jej argumentów oraz wyrażenia stanowiące zawartość funkcji (ang. ).
(defun square (x) (* x x))
Definicja funkcji może zawierać deklaracje, które dostarczają kompilatorowi informacji o ustawieniach optymalizacji lub typach danych argumentów. Może także zawierać dane do dokumentacji, z których Lisp może generować interaktywną dokumentację:
(defun square (x) (declare (integer x) (optimize (speed 3) (debug 0) (safety 1))) "Oblicza kwadrat liczby podanej w argumencie x" (* x x))
Anonimowe funkcje są definiowane przy użyciu lambda-wyrażeń. Styl programowania w Lispie często wykorzystuje anonimowe funkcje jako argumenty do innych funkcji.
Jest wiele operatorów związanych z definiowaniem i manipulowaniem funkcjami. Na przykład funkcja może zostać skompilowana za pomocą funkcji compile. Część implementacji CL uruchamia funkcje w interpreterze, jeżeli nie wydano instrukcji kompilacji, inne domyślnie kompilują w locie.