- •1 Общая характеристика дисциплины
- •1.1 Значение дисциплины ии
- •1.2 Понятие "искусственный интеллект"
- •1.3 Краткая история развития ии
- •1.4 Классификация систем ии
- •Представления знаний - центральная проблема ии.
- •Компьютерной лингвистики, решение которой обеспечивает процесс естественно- языкового общения с эвм и процесс автомтического перевода с иностранных языков.
- •Компьютерной логики, имеющей особо важное значение для развития экспертных систем, поскольку ее цель – моделирование человеческих рассуждений.
- •1.5 Основные направления развития ии
- •2Языки систем искусственного интеллекта
- •2.1 Общие сведения о языках сии
- •2.2 Язык лисп
- •2.2.1 Алфавит
- •2.2.2 Атомы и точечные пары
- •2.2.3 Списки
- •2.2.4 Арифметические функции языка лисп
- •2.2.5 Функции setq и quote
- •2.2.6 Функции car и cdr
- •2.2.7 Композиция функций саr и cdr.
- •2.2.8 Пустой список
- •2.2.9 Функция cons
- •2.2.10 Логические значения и предикаты
- •2.2.11 Предикаты атом и eq
- •2.2.12 Предикат null
- •2.2.13 Предикаты, классифицирующие атомы
- •2.2.14 Арифметические предикаты сравнения
- •2.2.15 Операции над строками битов
- •2.2.16 Функция cond
- •2.2.17 Определяющее выражение функции
- •2.2.18 Определяемые функции
- •2.2.19 Рекурсивные функции
- •2.2.20 Prog- механизм.
- •2.3 Обращение (инверсия) списков
- •2.4 Вычисление факториала числа
- •2.5 Вычисление длины списка
- •2.6 Вычисление длины списка и его подсписков
- •2.7 Соединение списков
- •2.8 Удаление элемента из списка
- •2.9 Функция, вычисляющая список общих элементов двух списков
- •2.10 Функция, объединяющая два списка и не включающая повторяющиеся элементы
- •2.11 Ассоциативные списки
- •2.12 Функции, изменяющие значения указателей
- •2.13 Функции read и print
- •2.14 Функция eval
- •3 Представление задач и поиск решений
- •3.1 Представление задач в пространстве состояний
- •3.2 Сведение задачи к подзадачам
- •3.3Представление задач в виде доказательства теорем
- •3.4 Поиск решения в пространстве состояний
- •3.5 Алгоритм поиска в ширину
- •3.6 Алгоритм поиска в глубину
- •3.7Алгоритм равных цен
- •3.8 Алгоритмы эвристического (упорядочного) поиска
- •3.9 Поиск решения задачи, при сведении задачи к подзадачам
- •3.10 Представление знаний
- •3.10.1 Продукционные системы
- •3.10.2Семантические сети
- •3.10.3 Представление знаний фреймами
- •3.11 Сопоставление с образцом
- •3.11.1 Функции Mapcad, Apply и Funcall
- •3.11.2 Свойства Атомов
- •3.11.3 Функция сопоставления с образцом
- •3.11.4 Присваивание значений при сопоставлении с образцом
- •3.11.5 Функции Explope, Compress, AtomCar, AtomCdr
- •3.11.6 Задание ограничений при сопоставлении с образцом
- •3.12 Программная реализация лисп - машин
- •3.12.1 Структура памяти лисп - машины
- •3.12.2 Диалекты языка лисп
- •3.12.3 Аппаратная реализация языка лисп
- •4 Математические основы логического вывода
- •4.1 Решение задач с помощью доказательства теорем
- •4.2 Тождественные преобразования при доказательстве теорем
- •4.3 Принцип резолюции
- •4.4Примеры применения принципа резолюции
- •4.5 Система управления роботом strips.
- •5Решение задач искусственного интеллекта на языке пролог
- •5.1 Применение метода доказательства теорем в системе пролог
- •5.2 Особенности программирования на пролоГе
- •5.4 Арифметические предикаты
- •5.5 Предикаты управления возвратом
- •5.6 Программа вычисления квадратного корня
- •5.7 Вычисление n!
- •5.8 Область действия предиката отсечения
- •5.9 Отрицание на пролоГе
- •5.10 Определение структур управления
- •5.11 Организация циклов в языке пролог
- •5.11.1 Цикл repeat-fail
- •5.11.2 Сопоставление цикла с возвратом и рекурсии
- •5.12 Операторная запись.
- •5.13 Ввод-вывод в системе пролог
- •5.13.1 Предикаты ввода-вывода символов
- •5.13.2 Предикаты ввода-вывода термов
- •5.13.3 Примеры применения предикатов ввода-вывода
- •5.14 Предикат name
- •5.15 Предикаты проверки типов термов
- •5.16 Создание и декомпозиция термов
- •5.17 Предикаты работы с базой данных .
- •5.18 Бинарные деревья
- •5.18.1 Построение бинарного дерева
- •5.18.2 Преобразование списка в упорядоченное дерево
- •5.18.3 Преобразование дерева в список
- •5.18.4 Удаление элемента из дерева
- •5.18.5 Поиск в глубину
- •5.18.6 Поиск в ширину
- •5.19 Поиск решений в игровых программах.
- •5.20 Обратное усечение дерева.
2.2.19 Рекурсивные функции
Если в теле функции содержится хотя бы одно прямое или косвенное обращение к самой себе, то такая функция называется рекурсивной. Такое обращение может быть неявным, т.е. обращение происходит к другой функции, которая содержит обращение к первой. Большинство встроенных функций используют рекурсию. ЛИСП допускает использование рекурсивных функций без всяких ограничений, в чем и заключается сила языка.
Принцип построения таких функций обычно сводится к следующему:
Обрабатывается 1-й элемент списка.
Рекурсивный вызов определяемой функции, которой в качестве аргумента передается “хвост” списка.
Проверяется условие, не стал ли “хвост” списка пустым списком, если это произошло, то происходит передача значений по цепочке рекурсивных вызовов.
Определим функцию, которая будет определять принадлежность атома некоторому списку
(MEMB X Y),
где X- атом,
Y- список.
Текст программы:
(DEFUN MEMB(X Y)
(COND
((EQ Y NIL) NIL)
((EQ X (CAR Y)) T)
(T (MEMB X (CDR Y)))
)
)
Здесь вначале выполняется проверка: является ли список Y пустым. Если да, то результат NIL. Это условие является также условием выхода из цикла, когда перебрали все элементы списка и не нашли в нем атома. Далее, если X является первым элементом списка Y, то результат Т. Если ни одно из условий не выполнилось, то отбросив из списка Y первый (проверенный) элемент, опять обращаемся к функции MEMB с целью выяснения, а не содержится ли искомый атом в хвосте списка.
Пример использования функции MEMB
(MEMB ‘A ‘(B C A D))
- о бращение к функции MEMB
A T
(B C A D)
A T - диаграмма работы функции MEMB
(C A D)
A T
(A D)
Т.о. анализируются простейшие частные условия, и если ни один из них не дает ответа, то следует прямое или косвенное обращение к той же функции для дальнейшего анализа. Но структура этих аргументов при повторном обращении становится чуточку проще. Так мы добираемся до простой ситуации, предусмотренной начальными проверками.
Эта функция работает, если внутри списка Y нет подсписков. Если необходимо, чтобы такая функция находила один список внутри другого, то следует ее переопределить. Для этого определим сначала функцию EQUAL, которая могла бы сравнивать списки. Отметим, что такая функция является встроенной для многих реализаций языка ЛИСП. Здесь мы это деляем в учебных целях.
(DEFUN EQUAL (X Y)
(COND
((ATOM X)(EQ X Y))
((ATOM Y) NIL)
((EQUAL(CAR X)(CAR Y))(EQUAL(CDR X)(CDR Y)))
(T NIL)
)
)
Программа выполняет следующие действия:
1.Если X- атом, то требуемое сравнение можно выполнить с помощью EQ;
2.Если Y- атом, (а X- уже не атом) то результат NIL.
3.Сравниваются головы списков, если они равны, то сравниваются их хвосты и если они равны, то результат Т.
4.Иначе ответ NIL.
Теперь с помощью EQUAL определим необходимую функцию MEMBER, работающую аналогично МЕМВ, но позволяющую обнаруживать наличие в списке элементов любого вида:
(DEFUN MEMBER (X Y)
(COND
((NULL Y) NIL)
((EQUAL X (CAR Y)) T)
(T (MEMBER X (CDR Y)))
)
)
Функции EQUAL и MEMBER весьма употребительны и, поэтому, существуют как встроенные во многих реализациях ЛИСПа.