Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Описания






Факты, объявленные с ключевым словом nondeterm

Ключевое слово nondeterm - тип по умолчанию для фактов (предикатов базы данных), объявленных в секциях фактов. Если ни одно из ключевых слов determ или single не используется при описании факта, компилятор применяет ключевое слово nondeterm. Обычно, предикаты базы данных недетерминированы. Поскольку факты можно добавлять в любое время выполнения программы, компилятор должен всегда предполагать, что возможно найти альтернативные решения в течение бэктрэкинга.

Если вы имеете предикат базы данных, для которого вы никогда не будете иметь больше, чем один факт, вы можете описать его, как determ или single.

Факты, объявленные с ключевым словом determ

Ключевое слово determ определяет, что база данных фактов может содержать только один факт данного типа. Так, если вы попробуете добавить один, а затем второй, такой факт в базу данных, Visual Prolog выдаст ошибку (1041 Assert to a fact declared as determ, but fact already exists). В таких случаях, программист должен проявлять особую осторожность.

Предыдущий факт с determ позволяет компилятору произвести лучший код, и вы не будете получать предупреждения о недетерминированности при вызове определенных предикатов. Это полезно при использовании флагов, счётчиков и других объектов, которые являются сильно глобализированными переменными.

Особенно обратите внимание, что при удалении факта, который объявляется как determ, запрос к недетерминированным предикатам retract/1 и retract/2, будет детерминирован. Так, если вы знаете, что в любой момент секция фактов содержит не более одного экземпляра факта counter() тогда, вы можете написать:

FACTS

determ counter(integer CounterValue)

 

GOAL

...

retract(counter(CurrentCount)),

/* here Prolog will not set backtracking point */

Count= CurrentCount + 1,

assert(counter(Count)),

...

 

Вместо

 

FACTS

counter(integer CounterValue)

 

PREDICATES

determ my_retract(dbasedom)

 

CLAUSES

my_retract(X): - retract(X),!. % deterministic predicate

 

GOAL

...

my_retract(counter(CurrentCount)),

/* here Prolog will not set backtracking point */

Count= CurrentCount + 1,

asserta(counter(Count)),

...

Факты, объявленные с ключевым словом single

Ключевое слово single перед фактом fact_N объявляет, что один и только один случай факта должен всегда существовать.

Факты single должны существовать уже, когда программа вызывает соответствующую цель; поэтому, факты single должны инициализироваться в разделе предложений в исходном коде программы. Например:

FACTS

single singleFact(string, string)

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.