Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лахов.doc
Скачиваний:
1
Добавлен:
15.04.2019
Размер:
380.42 Кб
Скачать

Символьные данные

Будучи языком функций, ЛИСП, кроме того, является символьным языком. Одна из важнейших особенностей ЛИСПа состоит в том, что данные, которыми он манипулирует, не обязательно состоят из чисел.

Вот относительно простой пример: мы можем присвоить переменной, допустим Х, значение в виде атома, например Y. Заметим, что полностью отлично от «Х присвоить Y» в обычном смысле; так, функция

(SETQ Х Y)

присваивает Х значение Y. Если Yбыло присвоено значение, равное 4, тогда (SETQ Х Y) должно установить Х также равным 4. заметим, что это делают оба способа. Если бы Y было равным Z (символу, а не объекту, который обозначается через Z), то (SETQ Х Y) присвоило бы Х значение в виде символа Z, установило бы Х равным Z. Для того чтобы в самый первый раз присвоить символам значения в виде других символов, мы можем использовать функцию QUOTE. Так,

(SETQ Х (QUOTE Y))

устанавливает Х равным символу Y. Коротко объясним это по порядку. QUOTE – функция, значением которой является сам аргумент; так, значение (QUOTE Y) – это Y. Теперь мы начинаем видеть в ЛИСПе определённую стройность, так же как (SETQ Х Y) устанавливает в Х значение Y, (SETQ Х (QUOTE Y)) присваивает Х значение (QUOTE Y), которое есть Y.

В качестве следующего примера рассмотрим функцию SET. Выражение (SET (QUOTE Х) Y) эквивалентно (SETQ Х Y) присваивает значению Х значение Y. Заметим, что если Х и Y просто числа, то это лишено смысла. Если Х есть 3, а Y есть 6, (SETQ Х Y) установило бы в 3 число 6, что нелепо. Но если значением Х является символ Z, (SETQ Х Y) установит в переменную Z значение переменной Y.

Внутренняя стройность ЛИСПа проявляется еще и в том, что каждый атом в ЛИСПе имеет значение. Каждое число, которое появляется в ЛИСП – программе, является атомом, значение этого атом – он сам. Это важная характеристика чисел в ЛИСПе, которые по существу не являются символьными атомами. Так, если мы напишем

(SETQ Р 3)

мы устанавливаем в Р значение 3, которое есть 3. если мы напишем с другой стороны

(SETQ Р Q)

мы устанавливаем в Р значение Q, которое, как правило , не является самим символом Q.

Значением Т, специального атома, обозначающего “true”,служит само Т. А значением NIL является NIL.

Если значением атома является другой атом с символическими именами, то числовые функции будут давать бессмысленные результаты. Очевидно, лишено смысла высказывание (+ X Y), если значением Y напишем символ Z.

Лекция №4 функции в языке лисп

Предложение процедурного языка FUNCTION INT (X,Y) служит началом описания функции. Описание содержит четыре основных части:

  1. Признак начала описания (слово FUNCTION).

  2. Имя функции (в нашем случае INT).

  3. Список параметров (X и Y) по порядку.

  4. Последующие предложения, которые в действительности и определяют функции.

В ЛИСПе признаком того, что далее должно следовать определение, служит слово DEFUN. Оно само является именем функции.

Одни и те же функции ЛИСПа можно определить по разному. Так, функция + имеет неопределенное число аргументов или параметров и ее значением служит их сумма. Если бы мы захотели, то могли бы определить функцию (временно назовем ее ADD), имеющую один аргумент, являющийся списком величин, которые должны быть сложены. Так, при помощи

(ADD (QUOTE (1 2 3 4 5)))

(+ 1 2 3 4 5)

был бы получен одинаковый результат, а именно 15.