ревірка, чи є аргумент порожнім спіскомNOT (NOT логічна величина) Логічне отріцаніеNTH (NTH n перелік) Виділення n-го елемента списку (NTH 2 (1 2 3) ): 3 (індекси починаються з 0) FIRSTПредікати, выделяющиеSECONDСоответствующие елементи спіскаLASTLIST (LIST apr АРГ2 ...) Будує з аргументів список (LIST ab (с)): (abc)
Зазначимо, що в програмах на Ліспі треба ретельно відрізняти значення від їх позначень.
У Ліспі константи позначають самих себе. Вирази типу (* 2 лютого) відразу обчислюються. Щоб уникнути небажаного обчислення виразу використовується функція QUOTE або знак апострофа (') перед виразом:
(* 2 2): 4
'(* 2 2):' (* 2 2) - список
Довільний символ можна використовувати як змінну, і він може позначати довільний вираз. При першому використанні символу має бути присвоєно або з ним пов'язано деяке значення за допомогою функції SET, наприклад,
(SET 'операції ' (+ - * / ))
Знак 'використовується для придушення обчислення аргументів функції SET. Функція SETQ не вирахував значення 1-го аргументу (а 2-го обчислює). p align="justify"> На значення символу можна послатися, вказавши його без апострофа (').
Для занесення значень в комірку пам'яті, пов'язаної з символом, можна користуватися узагальненою функцією присвоювання SETF, що розміщає значення у відповідній комірці пам'яті:
(SETF ячейка_памяті значення).
Мінлива В«ячейка_памятіВ» без апострофа вказує на комірку пам'яті. Присвоєння, що виконується функціями В»SET, SETQ і SETF, є побічним ефектом, цих функцій, крім того, дані функції повертають привласнюються значення. p align="justify"> ФОРМИ. КЕРУЮЧІ КОНСТРУКЦІЇ У ЛИСП-ПРОГРАМІ
Програма складається не тільки з функцій, а й з форм. Найпростішими формами є константи, змінні, лямбда-виклики, виклики функцій. p align="justify"> Зупинимося детальніше на спеціальних формах, призначених для управління обробкою програми і контекстом. У кожної форми певний синтаксис і семантика, засновані на єдиному способі запису та інтерпретації. p align="justify"> Керуючі пропозиції Ліспу зовні виглядають як виклики функцій - у вигляді дужкових виразів, перший елемент яких діє як ім'я керуючої структури, а інші елементи - як аргументи. Найбільш важливі форми можна розділити на такі групи:
робота з контекстом
QUOTE або блокування обчислення,
виклик функції і лямбда-виклик,
пропозиції LET і LET *;
послідовне виконання
пропозиції PROG1, PROG2 і PROGN;
розгалуження виконання
умовні пропозиції COND, IF, WHEN, UNLESS,
вибирає пропозицію CASE;
ітерації
циклічні пропозиції DO, DO *, LOOP, DOTIMES, DOUNTIL;
передачі управління
пропозиції PROG, GO і RETURN;
динамічне управління обчисленням
THROW, CATCH, а також BLOCK.
Ці керуючі форми (крім QUOTE і лямбда-виклику, а також викликів функцій), в основному, використовуються в тілі лямбда-виразів, що визначають функції.
Пропозиція LET використовується для створення зв'язку змінних всередині форми:
(LET ((пep1 знач1) (Пер2 знач2) ...) форма1 форма2 ...).
При обчисленні цього виразу статичні змінні пep1, Пер2, ... зв'язуються (одночасно) з відповідними значеннями знач1, знач2, ​​..., а потім обчислюються значення форм форма1, форма2, ... Значення останньої форми повертається як загальний результат. Форма LET * відрізняється від LET лише тим, що зв'язування змінних і обчислення форм відбувається не одночасно, а послідовно, спочатку 1-е, потім 2-е і т.д.
Наприклад:
(let * ((x2) (y (* 3x)))
(list x у)
Результат: (2 червень).
Пропозиції PROG1, PROG2 і PROGN дозволяють організовувати послідовні обчислення з декількох обчислюваних форм:
(PROG1 форма1 форма2 ... формаn)
(PROG2 форма1 форма2 .. формаn)
(PROGN форма1 форма2. формаn).
Розходження цих форм лише в повертаних ними в якості загального значення...