
- •Декларативные и императивные языки.
- •Стандартизация языков программирования
- •Типы данных
- •Структуры данных
- •Парадигма программирования
- •Способы реализации языков
- •Языки функционального программирования
- •Создание универсального функционального языка.
- •3. Символьная обработка и искусственный интеллект.
- •4. Применение искусственного интеллекта.
- •5. Основы языка лисп (6 – 15 вопросы)
- •6. Символы и списки
- •7. Понятие функции
- •8. Базовые функции Лиспа.
- •9. Имя и значение символа Лиспа.
- •10. Определение функций Лиспа.
- •11. Передача параметров в область их действия Лиспа.
- •11. Вычисления в Лиспе.
- •13 . Внутреннее представление списков в Лиспе
- •14. Свойства символа Лиспа.
- •15. Ввод и вывод в Лиспе.
- •16.Основы рекурсии.
- •17.Простая рекурсия.
- •18.Другие виды рекурсии.
- •19.Функции более высокого порядка.
- •20.Применяющие функционалы.
- •21.Отображающие функционалы.
- •22.Замыкания.
- •23.Абстрактный подход в Лиспе.
- •24.Макросы.
- •25.Понятия. Числа. Символы. Списки. Строки. Последовательности. Массивы. Структуры.
- •26.Развитие языка лисп и лисп-системы. История лисПа. Лисп-системы. Лисп-машины.
8. Базовые функции Лиспа.
Базисными функциями обработки символьных выражений (атомов и списков) являются:
CAR, CDR, CONS, ATOM и EQ
Функции по принципу их использования можно разделить на функции разбора, создания и проверки:
У функций CONS и EQ имеются два аргумента, у остальных примитивов - по одному. В качестве имен аргументов и результатов функций мы использовали названия типов, описывающих аргументы, на которых определена (т. е. имеет смысл) функция и вид возвращаемого функциями результата. S-выражение обозначает атом или список.
Функции АТОМ и EQ являются базовыми предикатами. Предикаты (predicate) - это функции, которые проверяют выполнение некоторого условия и возвращают в качестве результата логическое значение Т (в более общем виде, произвольное выражение, отличное от NIL) или NIL.
Функция CAR
Первый элемент списка называется головой (head), а остаток списка, т.е. список без первого его элемента, называется хвостом списка (tail). С помощью селекторов CAR и CDR
можно выделить из списка его голову и хвост. Функция CAR возвращает в качестве значения первый элемент списка, т.е. головной элемент списка:
Функция CAR имеет смысл только для аргументов, являющихся списками.
Функция CDR
Функция CDR применима к спискам. Значением ее будет хвостовая часть списка, т.е. список, получаемый из исходного списка после удаления из него головного элемента:
Хвост списка - тоже список, если только список не состоял из одного элемента. Значением функции CDR от пустого списка считается NIL.
Так же как и CAR, функция CDR определена только для списков. Значение для атомов не определено, что может приводить к сообщению об ошибке.
Функция CONS
Функция CONS строит новый список из переданных ей в качестве аргументов головы и хвоста. Функция добавляет новое выражение в список в качестве первого элемента:
Для того чтобы можно было включить первый аргумент функции CONS в качестве первого элемента значения второго аргумента этой функции, второй аргумент должен быть списком.
Значением функции CONS всегда будет список.
Предикат АТОМ
Предикат
АТОМ используется для идентифицирования
лисповских объектов, являющихся
атомами.Значением вызова АТОМ будет Т,
если аргументом является атом, и
С помощью предиката АТОМ можно убедиться, что пустой список NIL, или (), является атомом.
EQ
Предикат EQ сравнивает два символа и возвращает значение Т, если они идентичны, в противном случае
С его помощью можно сравнивать только символы или константы Т и NIL, и результатом будет значение Т лишь в том случае, когда аргументы совпадают. Для проверки чисел в Коммон Лиспе EQ не используется.
EQL Более общим по сравнению с EQ является предикат
EQL, который работает так же, как EQ, но дополнительно позволяет сравнивать однотипные числа (и элементы строк).
EQUAL проверяет идентичность записей
Он работает как EQL, но, кроме того, проверяет одинаковость двух списков:
EQUALP проверяет наиболее общее логическое равенство
NULL проверяет на пустой список
Встроенная функция NULL проверяет, является ли аргумент пустым списком:
Вложенные вызовы CAR и CDR можно записывать в сокращенном виде Комбинируя селекторы CAR и CDR, можно выделить произвольный элемент списка. Например:
NTH, выделяет n-й элемент списка:
Последний элемент списка можно выделить с помощью функции LAST: (LAST х)
LIST создает список из элементов