Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лисп.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.66 Mб
Скачать

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 создает список из элементов

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]