Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Conspekt.doc
Скачиваний:
11
Добавлен:
31.08.2019
Размер:
1.39 Mб
Скачать

2.2.8 Пустой список

Пустой список обозначается в ЛИСПЕ константой NIL. Поэтому NIL обозначает одновременно и пустой список и логическое значение ложь. Пустой список по определению в языке ЛИСП относится к атомам.

Пример:

(CAR NIL) и (CDR NIL)- неопределены, т.к. NIL- атом.

(CDR '(B))->NIL.

2.2.9 Функция cons

Собирает новый список из двух своих аргументов. Если второй аргумент список, то первый аргумент вставляется в начало этого списка.

(CONS '(A B) '(C D))->((A B) C D)

(CONS 'A '(B C))->(A B C)

(CONS (QUOTE A) NIL)->(A)

Если второй аргумент- атом, то образуется точечная пара.

(CONS 'A 'B)->(A.B)

2.2.10 Логические значения и предикаты

"Истина" и "ложь" называются в ЛИСПе "логическими значениями". Для их обозначения введены специальные атомы - константы: T- истина, NIL- ложь. Функция QUOTE с этими атомами не используется. В ЛИСПе все, что не является пустым списком, относится к истине. Иными словами, за истину принимается любое значение, отличное от NIL. Функции, вырабатывающие логические значения, называются предикатами. Выражения, принимающие только эти значения, называются логическими выражениями. Любая функция языка является и логической, а любое выражение - это и логическое выражение.

Предикатом называют неоднородную логическую функцию, аргументы которой могут иметь произвольные типы значений, а возвращаемый результат всегда логический.

2.2.11 Предикаты атом и eq

Предикат (ATOM X) имеет значение T, если X - атом, иначе - NIL. Применяется, как правило, в следующей ситуации. Анализируя структуру выражения, расчленяя его на элементы, мы должны знать, когда дальнейшее членение невозможно.

Пример:

(ATOM (CAR (QUOTE (A B))) -> T

(ATOM NIL) -> T

Предикат EQ- имеет два аргумента, один из которых должен быть атомом. Предикат позволяет установить является ли второй аргумент атомом и если да, то проверяет оба атома на совпадение и возвращает результат T или NIL.

Примеры:

(EQ 'A (CAR '(A B)))->T

(EQ NIL (CDR '(T NIL)))->NIL

(EQ (CDR (QUOTE (A C))) (CDR (QUOTE (B C)))) - неопределено.

Предикат ЕQN выполняет сравнение чисел, а предикат EQUAL- сравнение списков.

2.2.12 Предикат null

Предикат NULL имеет один аргумент и проверяет, является ли аргумент пустым списком.

(NULL (CDR '(A)))->T

Если аргумент имеет логическое значение, то NULL эквивалентно логическому отрицанию NOT.

(NULL (ATOM 'A))->NIL

(LAMBDA (X) (EQ X NIL))

2.2.13 Предикаты, классифицирующие атомы

FIXP- проверяет, является ли аргумент числом с фиксированной точкой.

NUMBERP- проверяет, является ли аргумент числом.

FLOATP- проверяет, является ли аргумент числом с плавающей точкой.

CONSTANP- проверяет, является ли аргумент константой(число, атом или строка).

STRINGP- проверяет, является ли аргумент строкой.

PAIRP- проверяет, является ли аргумент точечной парой.

BITSP- проверяет, является ли аргумент восьмеричным числом.

2.2.14 Арифметические предикаты сравнения

Аргументы этих предикатов - десятичные числа.

(LESSP X Y) -> T,если X<Y

(GREATERP X Y)-> T,если X>Y

(GREQP X Y) -> T,если X>=Y

(ZEROP X) -> T,если X=0

(MINUX X) -> T,если X<0

(ONESP X) -> T,если X=1

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