13.2.2 Пример простой лямбда-функции

Рассмотрим следующий пример:

(lambda (a b c) (+ a b c))

Мы можем вызвать эту функцию, передав ее в funcall, как здесь:

(funcall (lambda (a b c) (+ a b c))
         1 2 3)

Этот вызов вычисляет тело лямбда-выражения, при этом переменная a привязана к 1, b привязана к 2, а c привязана к 3. Вычисление тела складывает эти три числа, давая результат 6; следовательно, этот вызов функции возвращает значение 6.

Обратите внимание, что аргументы могут быть результатами других вызовов функций, как в этом примере:

(funcall (lambda (a b c) (+ a b c))
         1 (* 2 3) (- 5 4))

Это вычисляет аргументы 1, (* 2 3) и (- 5 4) слева направо. Затем оно применяет лямбда-выражение к значениям аргументов 1, 6 и 1, получая значение 8.

Как показывают эти примеры, вы можете использовать форму с лямбда-выражением в качестве ее CAR, чтобы создавать локальные переменные и присваивать им значения. В старые времена Lisp этот метод был единственным способом привязки и инициализации локальных переменных. Но в наши дни для этой цели яснее использовать специальную форму let (см. Локальные переменные). Лямбда-выражения в основном используются как анонимные функции для передачи в качестве аргументов другим функциям (см. Анонимные функции) или хранятся как определения функций-символов для создания именованных функций (см. Именование функции).