- •Данные и знания
- •При обработке на эвм, знания трансформируются алогично данным
- •Существует несколько способов получения слотов значений во
- •Формальные логические модели
- •Лекция №2
- •Вывод на знаниях
- •Стратегия управления выводом
- •Стандартные функции
- •Если мы определяем лисп – функцию
- •Символьные данные
- •Лекция №4 функции в языке лисп
- •Математическая логика в лисПе
- •Параметры
- •Функции для обработки списков
- •Предикаты
- •Лекция №5
- •Построение списков
- •Полный перебор
- •Направление поиска
- •Программирование методов поиска
- •Поиск в глубину, в ширину и по наилучшему варианту
- •Лекция №7 макросы
- •Макрос не вычисляет аргументы
- •Макрос вычисляется дважды
- •Контекст вычисления макроса
- •Пример отличия макроса от макроса
- •Рекурсивные макросы и продолжающиеся вычисления
- •Тестирование макросов
- •Обратная блокировка разрешает промежуточные вычисления
- •Лекция №8
- •Сопоставление с образцом и распознавание образцов
- •Распознавание списочных образцов
- •Условия сопоставимости
- •Использование переменных в образце
- •Сопоставление с переменной образца
- •Лекция № 9
Символьные данные
Будучи языком функций, ЛИСП, кроме того, является символьным языком. Одна из важнейших особенностей ЛИСПа состоит в том, что данные, которыми он манипулирует, не обязательно состоят из чисел.
Вот относительно простой пример: мы можем присвоить переменной, допустим Х, значение в виде атома, например 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) служит началом описания функции. Описание содержит четыре основных части:
Признак начала описания (слово FUNCTION).
Имя функции (в нашем случае INT).
Список параметров (X и Y) по порядку.
Последующие предложения, которые в действительности и определяют функции.
В ЛИСПе признаком того, что далее должно следовать определение, служит слово DEFUN. Оно само является именем функции.
Одни и те же функции ЛИСПа можно определить по разному. Так, функция + имеет неопределенное число аргументов или параметров и ее значением служит их сумма. Если бы мы захотели, то могли бы определить функцию (временно назовем ее ADD), имеющую один аргумент, являющийся списком величин, которые должны быть сложены. Так, при помощи
(ADD (QUOTE (1 2 3 4 5)))
(+ 1 2 3 4 5)
был бы получен одинаковый результат, а именно 15.