|
||||
|
Назад | Содержание| Вперёд 16. 2. Простой интерпретатор программ,управляемы...Назад | Содержание| Вперёд 16. 2. Простой интерпретатор программ,управляемых образцами Для описания модулей, управляемых образцами, мыприменим следующую синтаксическую конструкцию: ЧастьУсловия --->ЧастьДействия Часть условия представляет собой списокусловий: [ Условие1, Условие2,Условие3, . . .] где Условие1, Условие2 и т.д. -обычные прологовские цели. Предварительноеусловие запуска модуля считается выполненным,если все цели, содержащиеся в списке, достигнуты.Часть действия - это список действий: [ Действие1,Действие2, . . .] Каждое отдельное действие - это, как и раньше,прологовская цель. Для того, чтобы выполнитьсписок действий, нужно выполнить все действия изсписка. Другими словами, все соответствующиецели должны быть удовлетворены. Среди допустимыхдействий будут действия, соответствующиеманипулированию базой данных: добавить,удалить или заменить те илииные объекты базы данных. На рис. 16.4 показано, как выглядит наша программавычисления наибольшего общего делителя,записанная в соответствии с введенным намисинтаксисом. % Продукционные правила для нахождениянаибольшего общего % делителя (алгоритм Евклида) :- ор( 300, fx, число). [ число X, число Y, X >Y ] ---> [ НовХ is X - Y, заменить(число X, число НовХ) ]. [ число X ] ---> [ write(X), стоп ]. % Начальное состояние базы данных число 25. число 10. число 15. число 30. Рис. 16. 4. Программа,управляемая образцами, для получения наибольшего общего делителя множества чисел. Самый простой способ реализации этого языка -использовать механизмы управления базой данных,встроенные в Пролог. Добавить объект в базуданных или удалить объект из базы данных можно,применяя встроенные процедуры assert ( Объект) retract( Объект) Заменить один объект на другой также просто: заменить( Объект1,Объект2) :- retract( Объект1), !, assert( Объект2). Здесь задача оператора отсечения - недопустить, чтобы оператор retract удалил избазы данных более чем один объект (при возвратах). % Простой интерпретатор дляпрограмм, управляемых образцами % Работа с базой данных производится при помощипроцедур % assert и retract :- ор( 800, xfx, --->). пуск :- Условие ---> Действие, % правило проверить( Условие), % Условие выполнено? выполнить( Действие). проверить( [ ]). % Пустое условие проверить( [Усл |Остальные]) :- % проверить конъюнкцию call( Усл), % условий проверить( Остальные). выполнить( [ стоп] ) :- !. % Прекратить выполнение выполнить( [ ]) :- % Пустое действие (цикл завершен) пуск. % Перейти к следующему циклу выполнить [Д |Остальные] ) :- саll( Д), выполнить( Остальные). заменить( А, В) :- % Заменить в базе данных А на В retract( A), !, assert( В). Рис. 16. 5. Простойинтерпретатор для программ, управляемыхобразцами. Простой интерпретатор для программ,управляемых образцами, показан на рис. 16.5.Следует признать, что в интерпретаторе допущенызначительные упрощения. Так, например, в негозаложено чрезвычайно простое и жесткое правилоразрешения конфликтов: всегда запускать первыйиз потенциально активных модулей (в соответствиис тем порядком, в котором модули записаны впрограмме). Таким образом, программиступредоставлено единственное средство управленияпроцессом интерпретации - он может указать тотили иной порядок следования модулей. Начальноесостояние базы данных задается в видепрологовских предложений, записанных в исходнойпрограмме. Запуск программы производится припомощи вопроса ?- пуск. Назад | Содержание| Вперёд |
|
||
Главная | В избранное | Наш E-MAIL | Добавить материал | Нашёл ошибку | Наверх |
||||
|