ж (з 1979 по 1982)
(МДУ м. Москва (з 1982 по 1984)) (спеціальність
(технічна кібернетика)
(програмування )
(стаж (з 1984 по 1997)
)
ФУНКЦІЇ
Функції в Ліспі аналогічно математичних функцій ставлять у відповідність елементам з однієї безлічі - визначення (аргументів) - єдиний елемент з безлічі значень. У програмах слід розрізняти визначення функцій і виклик (застосування) функції. p align="justify"> У мові Лісп прийнята единообразная префіксная форма запису, при якій як ім'я функції або дії, так і аргументи записуються всередині дужок:
(f x)
(gxy) (сумма_квадратов 2 3).
Аналогічно записуються і арифметичні дії:
(+ х у)
(* x (+ yz))
(+ (^ х х) (+ у у)).
Визначення функцій та їх обчислення в Ліспі засноване на лямбда-численні Черча . У 1-обчисленні Черча функція записується у вигляді
(х1, х2, ..., xn). fn
У Ліспі 1-вираз має вигляд (LAMBDA (xl, x2, ..., xn). fn).
Символ LAMBDA означає, що ми маємо справу з визначенням функції. Символи xi є формальними параметрами, вони утворюють список, званий лямбда-списком; fn - це тіло функції, яка може мати довільну форму, допускаемую інтерпретатором Ліспу. Тілом функції може бути, наприклад, константа або композиція з викликів функцій. Функцію, яка обчислює суму квадратів двох чисел, можна, наприклад, визначити так:
(lambda (xy) (+ (* xx) (* yy))).
Лямбда-вираз - це безіменна функція, яка може бути використана для зв'язування формальних та фактичних параметрів на час обчислень. Виклик такої функції відбувається за формою
(лямбда-вираз а1 а2 ... an)
Тут ai - фактичні параметри, з якими відбувається обчислення.
Наприклад
((lambda (х у) (+ (* х х) (* у у))) 4 березень).
Результат: 25.
Визначити нову функцію і дати їй ім'я для наступних дзвінків можна за допомогою функції DEFUN (define function):
(DEFUN ім'я лямбда-список тіло).
DEFUN з'єднує символ з лямбда-виразом, і символ починає представляти (іменувати) визначені цим лямбда-виразом обчислення. Значенням цієї форми є ім'я нової функції:
(defun sumsquare (х у) (+ (* х х) (* у у))).
Результат: sumsquare.
Виклик (застосування) цієї функції:
(sumsquare 34)
Результат: 25.
Визначення функції задається списком, тому його можна модифікувати в ході виконання програми. Крім того, деякий символ може бути і ім'ям функції і змінної. p align="justify"> У Ліспі передача параметрів відбувається за значенням. Формальні параметри функцій є статичними і локальними, тобто дійсні тільки всередині тієї форми, в якій вони визначені.
Основу для побудови різних функцій утворює набір невеликого числа примітивних вбудованих функцій. Базовими функціями обробки S-виразів є функції
CAR, CDR, CONS, ATOM, EQ, EQL, =
та інші, зміст яких відображено у табл. 7.1
Таблиця 7.1
Базові функції обробки S-виразів
ФункцияВызовДействиеПример іспользованіяCAR (CAR список) Повертає Головна частина списку - його 1-й елемент (CAR (1234)) Результат: 1CDR (CDR список) Повертає хвостову частину списку-все. крім 1-го елемента (CDR (! 234)) Результат: (2 3 4) CONS (CONS S-вираз перелік) Будує список з переданих як аргументів голови і хвоста (CONS I (2 3 4)) Результат: (1234 ) ATOM (ATOMS-вираз -) Предикат; перевіряє, чи є аргумент атомом, і повертає або t (істина), або Nil або ("(неправда) (ATOM A): t (ATOM (1 2 3)): NilEQ (EQ символ Символ) Предикат: перевіряє тотожність символів-аргументів, непридатний для чисел (EQ AA): (EQ X (CAR (XYZ))): t tEQL (EQL число число) Предикат, перевіряє тотожність чисел одного типу (EQL 3.0 3.0 ): t = (= число число) Предикат, перевіряє тотожність чисел різних типів (= 30.3el): tEQUAL (EQUAL число або список число або список) Аналогічна EQL, але, крім того, перевіряє ідентичність списків (EQUAL (xyz) (xyz )): tEQUALP (EQUALP об'єкт об'єкт) Перевірка найбільш загального равенстваNULL (NULL перелік) Пе...