Создать функцию можно с помощью лямбда-выражения, которое подчиняется следующим синтаксическим правилам: (lambda (<формальные-параметры>) <выражение-тело>)
Слово «lambda» происходит из лямбда-исчисления, которое является теоретической основой языка Scheme. Результатом вычисления лямбда-выражения является безымянная функция. Например, выражение (lambda (x) (* x x)) возвращает функцию, вычисляющую квадрат значения своего единственного параметра.
Кроме того, как отмечалось выше, ссылки на переменные должны разрешаться в статике, и это требование оказывает сильное влияние на правила вычисления лямбда-выражений. Рассмотрим этот аспект вычисления лямбда-выражений более подробно.
Дело в том, что лямбда-выражение может содержать ссылки на переменные, связанные вне самого лямбда-выражения. Будем называть такие ссылки на переменные свободными (по отношению к лямбда-выражению). Например, в приводимом на рис. 1 примере в лямбда-выражении (lambda (x) (+ x n)) имеется свободная ссылка на переменную n. В примере используется выводимая конструкция let, которая позволяет расширить активное окружение новыми связываниями, то есть определить локальные переменные. Первым параметром задается список пар (идентификатор значение), определяющий локальные переменные, вторым параметром является последовательность выражений, для которых будут определены эти локальные переменные. (let ((n 1)) (let ((f (lambda (x) (+ x n)))) (let ((n 10)) (f 1)))) Рис. 1.Лямбда-выражение со свободной ссылкой на переменную
Теоретически можно выделить два подхода к разрешению ссылки на переменную: в статике (как принято в языке Scheme) и в динамике (как принято во многих других диалектах языка LISP). При этом результаты программы будут различные.