Funkcje W CL funkcje są traktowane jako typ danych. Umożliwia to na przykład pisanie funkcji, które pobierają inne funkcje jako argument albo zwracających inne funkcje. Standardowa biblioteka CL szeroko wykorzystuje tę możliwość, na przykład funkcja sort pobiera funkcję porównującą jako argument. Pozwala to na sortowanie nie tylko każdego typu danych, ale także umożliwia sortowanie złożonych struktur danych zależnie od klucza.
(sort (list 5 2 6 3 1 4) #'>) ; Sortuje listę używając > jako operatora porównującego. ; Zwraca (6 5 4 3 2 1).
(sort (list '(9 a) '(3 b) '(4 c)) (lambda (x y) (< (car x) (car y)))) ; Sortuje listę zależnie od pierwszego elementu podlisty. ; Zwraca ((3 b) (4 c) (9 a)). ; Lub: (sort (copy-seq '((9 a) (3 b) (4 c))) #'< :key #'car) ; korzystając z ''keyword parameters'. Model wartościowania dla funkcji jest bardzo prosty. Gdy parser napotyka na formę (F A1 A2 A3 ...), zakłada, że symbol F jest albo: Specjalnym operatorem (z ustalonej listy) Zdefiniowanym wcześniej makrem Nazwą funkcji
Jeżeli F jest nazwą funkcji, argumenty A1, A2, A3 itd. są wartościowane w porządku od lewej do prawej oraz, o ile funkcja istnieje, jest wywoływana z wartościami zwróconymi przez argumenty.