Информатика -продвинутый курс


ФУНКЦИИ


Функции в Лиспе аналогично математическим функциям ставят в соответствие элементам из одного множества - определения (аргументов) - единственный элемент из множества значений. В программах следует различать определение функций и вызов (применение) функции.

В языке Лисп принята единообразная префиксная форма записи, при которой как имя функции или действия, так и аргументы записываются внутри скобок:

 

(f x)

(g x y) (сумма_квадратов 2 3).

 

Аналогично записываются и арифметические действия:

 

(+ х у)

(*x(+yz))

(+ (^ х х) (+ у у)).

 

Определение функций и их вычисление в Лиспе основано на лямбда-исчислении Черча. В 1-исчислении Черча функция записывается в виде

 

1(х1,х2,... ,xn) .fn

 

В Лиспе 1-выражение имеет вид (LAMBDA (xl, x2,..., xn).fn).

Символ LAMBDA означает, что мы имеем дело с определением функции. Символы xi являются формальными параметрами, они образуют список, называемый лямбда-списком; fn - это тело функции, которая может иметь произвольную форму, допускаемую интерпретатором Лиспа. Телом функции может быть, например, константа или композиция из вызовов функций. Функцию, вычисляющую сумму квадратов двух чисел, можно, например, определить так:

 

(lambda(xy)(+(*xx)(*yy))).

Лямбда-выражение - это безымянная функция, которая может быть использована для связывания формальных и фактических параметров на время вычислений. Вызов такой функции происходит по форме

 

(лямбда-выражение а1 а2 ... an)

 

Здесь ai - фактические параметры, с которыми происходит вычисление.

Например

 

((lambda (х у) (+ (* х х) (* у у))) 3 4).

Результат: 25.

 

Определить новую функцию и дать ей имя для последующих вызовов можно с помощью функции DEFUN (define function):

 

(DEFUN имя лямбда-список тело).

 

DEFUN соединяет символ с лямбда-выражением, и символ начинает представлять (именовать) определенные этим лямбда-выражением вычисления. Значением этой формы является имя новой функции:

 




Начало  Назад  Вперед