Наиболее примитивная форма вызова функции в Lisp’е, конечно, не имеет имени. Любой список, который не интерпретируется как макровызов или вызов оператора, рассматривается как вызов функции. Другие конструкции предназначены для менее распространённых, но тем не менее полезных ситуаций.
Функция применяет функцию function к списку аргументов.
Все аргументы, кроме function передаются в применяемую функцию. Если последний аргумент список, то он присоединяется в конец к списку первых аргументов. Например:
Следует отметить, что если функция принимает именованные аргументы, ключевые символы должны быть перечислены в списке аргументов так же, как и обычные значения:
Это бывает очень полезным в связке с возможностью &allow-other-keys:
(funcall fn a1 a2 ... an) применяет функцию fn к аргументам a1, a2, ..., an. fn не может быть оператором или макросом, это не имело бы смысла.
Например:
Различие funcall и обычным вызовом функции в том, что функция получается с помощью обычных Lisp вычислений, а не с помощью специальной интерпретации первой позиции в списке формы.
Значение call-arguments-limit положительное целое, которое отображает невключительно максимальное количество аргументов, которые могут быть переданы в функцию. Эта граница зависит от реализации, но не может быть меньше 50. (Разработчикам предлагается сделать этот предел большим на сколько это возможно без ущерба для производительности.) Значение call-argument-limit должно, как минимум, равняться lambda-parameters-limit. Смотрите также multiple-values-limit.