
- •(Конспект лекций)
- •Список сокращений
- •Введение
- •Лекция 1. Языки штучного интеллекта и основы логического программирования Некоторые сведения о языках искусственного интеллекта
- •Введение в логическое программирование Историческая справка
- •Базовые объекты данных
- •Вопросы
- •Переменные
- •Правила
- •Зоны видимости имен
- •Логическая программа
- •Вопросы для самоконтроля
- •Вопросы на самостоятельную проработку
- •Лекция 2. Процедурная семантика интерпретатора Пролога
- •Метод резолюций
- •Унификация и подстановка
- •Композиция подстановок
- •Вычисление резольвенты
- •Алгоритмы Пролога
- •Стратегии доказательств
- •Процедура поиска доказательства в глубину
- •Пример выполнения логической программы с пошаговым анализом
- •Вопросы для самоконтроля
- •Вопросы на самостоятельную проработку
- •Лекция 3. Основы программирования в среде Турбо-Пролога
- •Разделы программы
- •Опции компилятора
- •Имена переменных
- •Раздел описаний доменов
- •Разделы описания предикатов и правил
- •Рекурсивные процедуры
- •Моделирование итеративных процедур
- •Основные сведения об арифметических предикатах
- •Внелогические предикаты
- •Работа с файлами
- •Вопросы для самоконтроля
- •Вопросы на самостоятельную проработку
- •Лекция 4. Списки и управление выводом в Турбо-Пролог-программах Списки
- •Описания списков
- •Шаблон для работы со списками
- •Примеры программ работы со списками
- •Управление формированием вывода Отсечение
- •«Зеленые» и «Красные» отсечения
- •Предикаты not и fail
- •«Циклы» управляемые отказом
- •Вопросы для самоконтроля
- •Вопросы на самостоятельную проработку
- •Лекция 5. Динамическая база данных в Турбо-Пролог-программах Составные области
- •Операции с динамической базой данных
- •Пример построения проекта с динамической базой данных
- •Ограничения Турбо-Пролога
- •«Циклы» с возвратами
- •Лисп – язык функционального программирования
- •Правильные выражения
- •Базовые предикаты и конструкторы
- •Определяющие выражения функций
- •Условные выражения
- •Выражения для представления циклов
- •Встроенные и определяемые пользователем функции
- •Вопросы для самоконтроля
- •Вопросы на самостоятельную проработку
- •Лекция 7. Функциональное программирование в среде Лиспа
- •Виды рекурсий Рекурсии по значению и по аргументам
- •Простая рекурсия
- •Параллельная рекурсия
- •Взаимная рекурсия
- •Рекурсии высших порядков
- •Метод накапливающих параметров
- •Функционалы
- •Применяющие функционалы
- •Отображающие функционалы
- •Вопросы для самоконтроля
- •Вопросы на самостоятельную проработку
- •Лекция 8. Функциональные абстракции и процедурное программирование в Лиспе Представление функции в процессе вычислений Понятие замыкания
- •Создание замыканий
- •Функции с функциональным результатом вычислений и частичные вычисления
- •Функциональные абстракции
- •Формы блоков и связывания переменных
- •Присваивание значений переменным
- •Прочие процедурные формы в Лиспе
- •Вопросы для самоконтроля
- •Вопросы на самостоятельную проработку
- •Лекция 9. Лисп-методы программирования Программирование, управляемое данными
- •Программирование, управляемое событиями
- •Сопоставление с образцом
- •Списочные образцы
- •Переменные в образцах
- •Образцы с предикатами
- •Продукционное и логическое программирование в Лисп-системах
- •Объектное программирование
- •Вопросы для самоконтроля
- •Вопросы на самостоятельную проработку
- •Лекция 10. Представление знаний в программах на Лиспе Процедурный подход к представлению знаний
- •Представление знаний на основе продукций
- •Представление продукций
- •Интерпретатор продукций
- •Методы поиска решений
- •Функция для загрузки
- •Разрыв командного цикла и отладка
- •Вычисление s-выражений
- •Функции и формы
- •Типы данных
- •Макросы ввода
- •Lambda-списки
- •Функции ввода/вывода
- •Вычисление форм catch и throw
- •Объектное программирование в Xlisp Создание класса
- •Добавление методов в интерактивном режиме
- •Вопросы для самоконтроля
- •Html-документ Инструментарий создания и редактирования
- •Структура документа
- •Html тэги
- •Информация игнорируемая браузерами
- •Свойства страницы в целом
- •Информация для поисковых систем и стандарты
- •Элементы управления размещением текста и графики
- •Ссылки и протоколы
- •Задание цвета в html
- •Подготовка графики и анимация Графические форматы
- •Подготовка изображений для применения в документе
- •Анимация
- •Вопросы для самоконтроля
- •Управление шрифтами
- •Физические текстовые стили
- •Специальные символы
- •Графика
- •Управление взаимным размещением текста и графики
- •Гипертекстовые и графические ссылки Организация ссылок
- •Графические ссылки
- •Расширенная работа с гиперссылками Типы ссылок в документе
- •Якоря (метки)
- •Атрибут target
- •Изображения-карты
- •Списки и таблицы Виды списков
- •Элементы таблиц
- •Вопросы для самоконтроля
- •Элементы создаваемые тэгом input
- •Простые и графические кнопки
- •Списки выбора
- •Текстовые области
- •Приемы для выравнивания элементов
- •Методы передачи данных к серверу
- •Дизайн web-сайтов Типы сайтов
- •Топология и распределение материала
- •Формат страницы
- •Заглавия и заголовки
- •Навигация
- •Блоки текста
- •Средства позиционирования
- •Вопросы для самоконтроля
- •Вопросы на самостоятельную проработку
- •Лекция 15. Элементы языка css Язык управления структурой и стилями
- •Размещение css-элементов
- •Адресная модель css
- •Содержимое css-файла или style-контейнера
- •Селекторы
- •Комментарии
- •Применение css в оформлении документов Управление визуализацией
- •Схемы позиционирования
- •Текст и шрифты
- •Вопросы для самоконтроля
- •Вопросы на самостоятельную проработку
- •Лекция 16. Основы языка Java Script Назначение языка программирования Java Script
- •Тэги для программ на Java Script
- •Основные конструкции языка JavaScript
- •Декларации функций
- •Операторы, операции и выражения
- •Массивы
- •Объектная модель документа
- •Вопросы для самоконтроля
- •Вопросы на самостоятельную проработку
- •Лекция 17. Объекты и скрипты в html-документах Объекты пользователя
- •Создание объектов
- •Добавление новых свойств и методов
- •Проверка наличия свойств и методов
- •Встроенные объекты языка программирования
- •Обработка особых ситуаций в документе
- •Классификация ситуаций
- •Установление реакции на ситуацию
- •Методы объекта String
- •Программирование работы с метками и гиперссылками
- •Динамическое создание меток и гиперссылок
- •Вопросы для самоконтроля
- •Вопросы на самостоятельную проработку
- •Лекция 18. Различные аспекты применения скриптов Управление окнами
- •Динамическое формирование документа
- •Управление слоями
- •Объект, соответствующий форме
- •Адресация и именование
- •Свойства и методы
- •Динамическое изменение надписей и изображений на кнопках
- •Форматы документов отличающиеся от html
- •Вопросы для самоконтроля
- •Вопросы на самостоятельную проработку
- •Литература
Основные сведения об арифметических предикатах
Данные об арифметических предикатах можно обобщить следующим образом:
В арифметических выражениях символ = связывает левую и правую части отношения “=”. Одна и та же переменная не может использоваться слева и справа от символа “=”, т.к. такое отношение будет заведомо можно.
Помимо функций +, - , *, /,div, mod, являющихся фактически именем некоторого значения в выражениях (функтором), в выражениях можно использовать скобки ( ), управляющие приоритетом операций, а также функции: sin(x), cos(x), tan(x), arctan(x), exp(x), ln(x), lg(x), eqrt(x), round(x) (округление ), abs(x), random(x) – случайное число в диапазоне [0,1], применять композицию функций.
Операции отношений следующие: =, <>, <, >, <=, =>. Операции отношений можно применять ко всем базовым областям данных, в т.ч. к символьному типу, но не к домену file.
Внелогические предикаты
Внелогические предикаты в процессе решения задачи порождают побочный эффект. Это предикаты ввода/вывода, обеспечения доступа к компонентам программы и управления её работой, связи с ОС. Внелогические предикаты не формируют точку решения в дереве логического вывода. Поэтому, если и будет при решении задачи выполняться возврат, то только не к предикатам данного типа и, т.о., все выполненные операции отменяться не будут.
Пример
predicates
zadanie
zadacha(string)
……..
clauses
zadanie:- makewindow(10, 120, 1, “Лаб. работа №1”, 5, 5, 10, 70), write(“Имя файла?”), nl, readln(FlStrname), zadacha(FlStrname), nl, removewindow, write(“Задание выполнено!”), getchar(_), exit.
……..
В этой программе утверждение цели “zadanie” необходимо ввести с системного окна, поскольку секция goal в программе отсутствует. Выполнение программы начинается с отображения окна с заголовком “Лаб. работа №1”, затем в этом окне выводится запрос - “Имя файла?”. Введенная с клавиатуры строка унифицирует переменную FlStrname. Собственно выполнение программы обеспечивает предикат zadacha. После завершения задачи в системном окне появится сообщение “Задание выполнено!” и после ввода произвольного символа с клавиатуры работа программы и Турбо-Пролога будет завершена. Если при выполнении цели zadacha будет выполнен возврат, то в системном окне появится сообщение “not”. Повторных решений не будет, т.к. внелогические предикаты не создают точек решений. В данной программе, если не указывать предикат exit, то в случае получения решения управление передается меню Турбо-Пролога.
Работа с файлами
Когда запускается программа, то стандартными устройствами ввода/вывода являются screen (экран) и keyboard (клавиатура). Для применения внелогических предикатов ввода/вывода к файлам (устройствам) необходимо их открыть (openread, openwrite, openmodify, openappend), переопределить текущее устройство чтения или записи (readdevice, writedevice) и затем выполнять чтение или запись (read,…, write,…). Одновременно можно открыть несколько файлов, однако только одно устройство является текущим устройством чтения и только одно устройство является текущим устройством записи.
Пример
Программа обеспечивает создание нового файла из исходного выбрасыванием строк, начинающихся символом А.
domains
str = string
file = inp; out
predicates
mainjob (str,str)
zadacha
obr (str, char)
clauses
mainjob (Flnm 1,Flnm 2): - openread (inp, Flnm1),
openwrite (out,Flnm2), readdevice (inp), writedevice (out), radacha.
radacha: - not (eof(inp)), readln (Str), froutchar (Str, C, _),
obr (Str, C), zadacha.
zadacha: - eof (inp), closefile (inp), closefile (out).
obr (Str, C): - c<>’A’, write (Str), nl.
obr (_, C): - C = ‘A’.
В целевом предложении вызывается mainjob с аргументами – именами файлов. Вновь имеем пример интеративной программы. Предикат not(Цель) удовлетворяется, если Цель не м.б. согласована.
Предикат readlr (Str) читает очередную строку, frontchar (Str1, C, Str2) выделяет 1-й символ из Str1 в C и дает остаток в Str2, nl - выдает в поток символ “конец строки”.
В данном случае имеем пример детерминированной программы. Она дает одно решение. Это обеспечивается использованием детерминированных предикатов radacha и obr, каждый из которых дает точно одно решение за счет указания всех возможных условий в начале, - not(eof(…)) или eof(…), C <> ’A’ или c = ’A’.
Программа осталась бы детерминированной и в случае другого определения предиката obr в виде: “obr(_, ‘A’)”, или если поменять местами порядок определений.