Использование отношений-селекторов облегчает также и последующую модификацию программ. Представьте себе, что мы захотели повысить эффективность программы, изменив представление информации. Все, что нужно сделать для этого, - изменить определения отношений-селекторов, и вся остальная программа без изменений будет работать с этим новым представлением.
Упражнение
4. 3. Завершите определение
отношения
которое выполняется, если Х является N-м элементом списка Список.
Посмотреть ответ
Назад | Содержание | Вперёд
Назад | Содержание | Вперёд
4. 3. Моделирование недетерминированного автомата
Данное упражнение показывает, как абстрактную математическую конструкцию можно представить на Прологе. Кроме того, программа, которая получится, окажется значительно более гибкой, чем предполагалось вначале.
Рис. 4. 3. Пример недетерминированного конечного автомата.
Переход выполняется всякий раз при чтении
входного символа. Заметим, что переходы могут
быть недетерминированными. На рис. 4.3 видно, что
если автомат находится в состоянии
Состояние
(1) он начинается в начальном состоянии,
(2) он оканчивается в конечном состоянии, и
(3) метки дуг, образующих этот путь, соответствуют полной входной цепочке.
Решать, какой из возможных переходов делать в каждый момент времени - исключительно внутреннее дело автомата. В частности, автомат сам решает, делать ли спонтанный переход, если он возможен в
Рис. 4. 4. Допущение цепочки: (a) при чтении первого символа X;
(b) при совершении спонтанного перехода.
текущем состоянии. Однако абстрактные
недетерминированные машины такого типа обладают
волшебным свойством: если существует выбор, они
всегда избирают "правильный" переход, т.е.
переход, ведущий к допущению входной цепочки при
наличии такого перехода. Автомат на рис. 4.3,
например, допускает цепочки
Некоторый автомат можно описать на Прологе при помощи трех отношений:
(1) Унарного отношения конечное, которое определяет конечное состояние автомата.
(2) Трехаргументного отношения переход, которое определяет переход из состояния в состояние, при этом
переход( S1, X, S2)
означает переход из состояния S1 в S2, если считан входной символ X.
(3) Бинарного отношения
спонтанный( S1, S2)
означающего, что возможен спонтанный переход из S1 в S2.
Для автомата, изображенного на рис. 4.3, эти отношения будут такими:
конечное( S3).
переход( S1, а, S1).
переход( S1, а, S2).
переход( S1, b, S1).
переход( S2, b, S3).
переход( S3, b, S4).
спонтанный( S2, S4).
спонтанный( S3, S1).
Представим входные цепочки в виде списков
Пролога. Цепочка
допускается( Состояние, Цепочка)