Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Модуль Forms 65535
Имитационное мо... 59600
Реклама
Сейчас на сайте
Гостей: 4
На сайте нет зарегистрированных пользователей

Пользователей: 13,110
новичок: kostya001001
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Диплом RSA, ЭЦП, сертификаты, шифрование на C#
Моделирование процесса передачи данных по магистрали с основным и резерв...
Моделирование процесса обработки заданий на вычислительном центре на GP...

Реклама



Подписывайся на YouTube канал о программировании, что бы не пропустить новые видео!

ПОДПИСЫВАЙСЯ на канал о программировании
ИСПОЛЬЗОВАНИЕ ОТСЕЧЕНИЯ
Отсечение применяется для устранения бесконечных циклов, при программировании взаимоисключающих утверждений и при необходимости неудачного завершения доказательства цели. Рассмотрим все три случая на примерах.
Пример 1. Устранение бесконечных циклов. Вновь обратимся к утверждениям, определяющим вычисление факториала (см. тему «Рекурсия»).
'факт'(0,1).
'факт'(K,F): - К1 is К-1, 'факт'(К1,F1), F is F1*К.



Введя запрос:
?- 'факт'(0,X).



получим
X=1 -> ;



Если мы поставим <;>, т.е. запросим еще решения, то Пролог сделает попытку сопоставить 'факт'(0,Х) со вторым утверждением 'факт'(К,F): -.. . Сопоставление успешно, и теперь делается попытка доказать цель 'факт'(-1,F1), что в свою очередь приводит к цели 'факт'(-2,F2) и так далее, т.е. образуется бесконечный цикл.
К счастью, можно устранить такие ситуации, используя отсечение, и тем самым указывая Прологу, что не существует других решений в случае успешного согласования граничного условия.
'факт'(0,1):-!.
'факт'(К,F):-К1 is К-1,'факт'(К1,F1),F is F1*К.



Учитывая данное определение 'факт' и задавая вопрос:
? - 'факт'(0,Х).



получаем единственное решение:
X=1 -> ;
no



Пример 2. Программирование взаимоисключающих утверждений. При оценке роста человека чаще всего пользуются не числовыми данными, а качественными определениями, например "Человек высокого роста" или "Он был ниже среднего роста". Можно связать эти качественные оценки с числовыми данными (Н - высота человека, см), например, следующим образом:
ОЧЕНЬ_ВЫСОКИЙ, если Н>200;
ВЫСОКИЙ, если 170<Н<=200;
РОСТ= ВЫШЕ_СРЕДНЕГО, если 160<Н<=170;
СРЕДНИЙ, если 150<Н<=160;
НИЖЕ_СРЕДНЕГО, если 140<Н<=150;
МАЛЕНЬКИЙ, если Н<140.



Тогда описать классификацию людей по росту можно с помощью следующих утверждений языка Пролог:
/* первый вариант программы */
'рост'(Н,'ОЧЕНЬ ВЫСОКИЙ'):- Н>200.
'рост'(Н,'ВЫСОКИЙ'):- Н>170,Н=<200.
'рост'(Н,'ВЫШЕ СРЕДНЕГО'):- Н>160,Н=<170.
'рост'(Н,'СРЕДНИЙ'):- Н>150,H=<160.
'рост'(Н,'НИЖЕ СРЕДНЕГО'):- Н>140,H=<150.
'рост'(Н,'МАЛЕНЬКИЙ'):- Н<140.
/* второй вариант программы */
'рост1'(Н,'ОЧЕНЬ ВЫСОКИЙ'):- Н>200,!.
'рост1'(Н,'ВЫСОКИЙ'):- Н>170,!.
'рост1'(Н,'ВЫШЕ СРЕДНЕГО'):- Н>160,!.
'рост1'(Н,'СРЕДНИЙ'):- Н>150,!.
'рост1'(Н,'НИЖЕ СРЕДНЕГО'):- Н>140,!.
'рост1'(Н,'МАЛЕНЬКИЙ').



В первом варианте программы тело каждого правила содержит все условия, описывающие человека данной категории, во втором варианте все правила, кроме последнего, содержат знаки отсечения "!".
В первом варианте программы при возврате независимо от уже найденного единственно верного решения вновь будут безуспешно просматриваться все остальные, лежащие ниже решения. На это затрачивается много времени. Во второй программе благодаря отсечению просмотр остальных решений производиться не будет. Рассмотрим, что произойдет, если знаки отсечений удалить из утверждений. Тогда в ответ на запрос типа
? -'рост'(175,Х).
X='ОЧЕНЬ ВЫСОКИЙ' --->;
X='ВЫСОКИЙ' --->;
X='ВЫШЕ СРЕДНЕГО'-->;
X='СРЕДНИЙ'-->;
X='НИЖЕ СРЕДНЕГО'-->;
X='МАЛЕНЬКИЙ'-->;
no



будет получено несколько решений, из которых только первое верно, а остальные ошибочны. Таким образом, в данной программе отсечение несет двойную функцию: благодаря сокращению пространства поиска уменьшает время решения и, главное, отсекает неправильные варианты ответов на запрос, позволяя получить единственно правильное решение.
Чтобы определение роста стало полностью корректным, необходимо рассмотреть и такие случаи, когда значение Н задается либо меньшим 20 см, либо слишком большим(>300 см). И в том и в другом случаях доказательство должно завершаться неудачей (т.к. иметь подобный рост для человека нереально). Для этого во вторую программу введем еще одно утверждение:
'рост3'(Н,_) :- (Н<20;H>300),!,fail.
'рост3'(Н,'ОЧЕНЬ ВЫСОКИЙ'):- Н>200,!.
'рост3'(Н,'ВЫСОКИЙ') :- Н>170,!.
'рост3'(Н,'ВЫШЕ СРЕДНЕГО'):- Н>160,!.
'рост3'(Н,'СРЕДНИЙ') :- Н>150,!.
'рост3'(Н,'НИЖЕ СРЕДНЕГО') :- Н>140,!.
'рост3'(Н,'МАЛЕНЬКИЙ').
и обратимся к системе с запросом:
? - 'рост'(0,Х).
no



Сначала произойдет сопоставление запроса с головой первого утверждения. Цель (H<20; H>300) будет достигнута. Затем будет доказана цель - отсечение. Но когда встретится предикат fail, стоящий перед ним предикат отсечение остановит работу механизма возврата. В результате ответом на запрос будет "нет" (no). Преимущество введения предиката fail заключается в том, что выделяются случаи, когда доказательство утверждений должно закончиться неудачей.




Опубликовал Kest November 05 2009 17:48:49 · 0 Комментариев · 6937 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
MiniChat
Синтаксический ан...
Assembler. Практикум
XPButtons
Info
Измерение тактово...
MicroGPSS Studen ...
Run
DiZsubmit
BDEPack
Tetris 2002
«Философия» прогр...
Шейдеры в Delphi
Длинный заголовок...
Правила программи...
Пользовательская...
Delphi 6 программ...
SMExport
Библия для програ...
Globus VCL Extent...

Топ загрузок
Приложение Клие... 100515
Delphi 7 Enterp... 90474
Converter AMR<-... 20093
GPSS World Stud... 15031
Borland C++Buil... 12761
Borland Delphi ... 8966
Turbo Pascal fo... 7097
Калькулятор [Ис... 5140
Visual Studio 2... 5020
FreeSMS v1.3.1 3555
Случайные статьи
Сохранение работос...
ПАРАМЕТРИЗАЦИЯ В П...
Целостность информ...
Добавление дополни...
Открытие существую...
Программирование н...
Visual FoxPro сам ...
Обучение английско...
Простое наследование
Команды предварите...
Соревнование за до...
Отправить обратные...
Слотобаза
Шаблон документа
Перегрузка шаблоно...
Как привлечь 1000 ...
Основные преимущес...
свой технический п...
Прикладные службы
Раскрутка сайта с ...
Формы расширенного...
Маршрутизатор обра...
Степень числа
Применение фреймов
Определение размер...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?