Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
FLP-Questions.doc
Скачиваний:
2
Добавлен:
21.09.2019
Размер:
110.08 Кб
Скачать

13Базовые функции Лиспа.

  • Функции для атомов и пар:

cons car cdr eq atom

  • Объявление и управление:

cond lambda define eval quote

  • Функции с побочным эффектом

rplaca rplacd

Функция CONS, принадлежащая к классу SUBR, объединяет значения двух своих аргументов в точечную пару. Если значением первого аргумента является атом, а второго - список, то результатом функции CONS будет список, голова которого есть значение первого аргумента, а хвост - значение второго.

Функция CAR возвращает голову списка или ключевой (первый) элемент точечной пары (конса). (car `(a b c d)) => A

Функция CDR возвращает хвост списка или второй элемент точечной пары (конса).(cdr `(a b c d)) => (B C D)

Функция EQ, относящаяся к классу SUBR принимает два аргумента. Она работает следующим образом:

Если значением первого и второго аргумента является один и тот же атом, то функция возвращает в качестве результата атом T; Во всех остальных случаях функция возвращает атом Nil.

Функция ATOM. Эта функция возвращает атом T, если значение ее единственного аргумента есть атом, и Nil в противном случае.

Функция COND, принадлежащая к классу FSUBR, принимает произвольное количество аргументов. Каждый аргумент функции COND должен быть списком ровно из двух элементов. Первый из этих элементов будем называть условием, а второй - результатом. Таким образом, общий вид вызова COND таков: (COND (Условие1 Результат1) (Условие2 Результат2) ... (Условиеn Результатn))

lambdа-функция - это элементарная функция контекстного вызова.

(DEFUN ATOM LAMBDA-выражение) Функция DEFUN соединяет атом ATOM с LAMBDA-выражением, и ATOM начинает представлять (именовать) определенные этим лямбда-выражением вычисления. Функция DEFUN возвращает имя новой функции.

QUOTE - специальная функция с одним аргументом, которая возвращает в качестве значения этот аргумент.

Функция EVAL позволяет снять блокировку QUOTE.

14Опишите три варианта предиката равенства в Лиспе.

Common Lisp предоставляет ряд предикатов для проверки равенства двух объектов: eq (наиболее частный), eql, equal и equalp (наиболее общий). eq и equal имеют значения традиционные в Lisp’е. eql был добавлен, потому что он часто бывает необходим, и equalp был добавлен преимущественно, как версия equal, которая игнорирует различия типов при сравнении двух чисел и различия регистров при сравнении строковых символов. Если два объекта удовлетворяют любому из этих предикатов, то они также удовлетворяют всем тем, которые носят более общий характер.

[Функция] eq x y

(eq x y) является истиной тогда и только тогда, когда, x и y являются идентичными объектами.

[Функция] eql x y

Предикат eql истинен, если его аргументы равны eq, или если это числа одинакового типа и с одинаковыми значениями, или если это одинаковые строковые символы.

[Функция] equal x y (equal 3 3.0) ложь (equal 3.0 3.0) истина

Предикат equal истинен, если его аргументы это структурно похожие (изоморфные) объекты. Грубое правило такое, что два объекта равны equal тогда и только тогда, когда одинаково их выводимое представление.

[Функция] equalp x y (equalp 3.0 3.0) истина (equalp 3 3.0) истина

Два объекта равны equalp, если они равны equal, если они строковые символы и удовлетворяют предикату char-equal, который игнорирует регистр и другие атрибуты символов, если они числа и имеют одинаковое значение, даже если числа разных типов, если они включает в себя элементы, которые также равны equalp.

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