Лисп


 * Структуры данных в языке LISP**

Lisp - это целое множество языков программирования, код программ в которых, также как и данные, представляются системами линейных списков символов. Lisp считается вторым в истории высокоуровневым языком программирования после Фортрана и применяется до сих пор. Как и Фортран, Lisp претерпевал большие изменения в течение своей жизни и имел несколько диалектов. На сегодняшний день наиболее широкую известность приобрели диалекты «Common Lisp» и «Scheme». В языке CLIPS в качестве средств представления знаний могут использоваться правила, объекты и факты.

**Свойства языка LISP:**
 * основной структурой данных в нем является список;
 * программы на этом языке также имеют списочную структуру;
 * его базовыми операциями являются операции над списками.

В 1960 году выбор списков в качестве базовой структуры языка программирования рассматривался как революционный шаг. Сейчас большинство языков программирования общего назначения тем или иным образом поддерживает операции над списочными структурами, хотя от программистов обычно требуется запрашивать выделение памяти для формирования списка, а затем после его использования — возвращать память системе. В LISP еще на ранних стадиях развития в исполняющую систему был встроен механизм "уборки мусора", и программисту не требовалось следить за распределением памяти. Базовым блоком в структуре данных языка LISP является символическое выражение. Простое символическое выражение использует атомарные символы, или //атомы// — строки буквенно-цифровых символов, которые начинаются с буквы, например WOMBAT. (Допустимая длина строки варьируется в зависимости от версии исполняющей системы.) Во внутренней структуре данных атом представлен ячейкой памяти. Отдельным атомом является символ Т, которым представляется константа "True" — истина. Другой специальный атом, NIL, представляет, с одной стороны, константу "False"—ложь, а с другой — //пустой список.// Составные выражения объединяются в древовидной структуре, при этом используется очевидное соответствие между символическими выражениями и представлением конечных деревьев. Списки представляют собой довольно гибкие структуры данных, поскольку могут объединять элементы разных типов и иметь произвольную длину и размерность (вложенность). Например, в LISP возможен такой список:("а" (9) N (? (WOMBAT)) (A. В) NIL 0.9) Этот список содержит элементы разных типов — строки, числа с фиксированной и плавающей точкой, атомы, булевы значения, точечные пары и другие списки. Но списки имеют и определенные недостатки, из-за которых в LISP были включены и другие структуры данных. Списки в LISP представляют собой стеки, т.е. доступ к ним возможен только с одного конца списка. Манипулируя только таким списком, невозможно обратиться к элементу списка по его позиции, как это делается с элементом массива. Поэтому для представления больших совокупностей относительно постоянных или редко меняющихся данных в LISP были включены другие типы структур. В современных версиях LISP поддерживаются массивы, хэш-таблицы и структуры, подобный записям, которые позволяют эффективнее использовать пространство памяти и повысить скоро

**Источники:** 1.Экспертные системы Электронный учебник Курс лекций: []

2. Джозеф Джарратано, Гари Райли «Экспертные системы: принципы разработки и программирование»: []

3. Русскоязычное сообщество лисперов: []