Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Описания
Факты, объявленные с ключевым словом 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)
|