Навигация
Главная
Поиск
Форум
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
Имитационное мо... 60771
Реклама
Сейчас на сайте
Гостей: 4
На сайте нет зарегистрированных пользователей

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

Моделирование работы аэропорта на GPSS + Пояснительная записка
Моделирование работы перекрёстка по регулированию движения на GPSS + Поя...
Изменения контуров и сортировка в двумерном массиве чисел на Turbo Pasca...

Реклама



Подписывайся на 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 Ноябрь 05 2009 17:48:49 · 0 Комментариев · 6990 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
Профессиональное ...
FormShape [Исходн...
GPSS World Studen...
Приемы программир...
Модифицированная ...
39 статьи по Delphi
Blib [Исходник на...
Добавление басса ...
AlignEdit
JanReplace
PDPcheck
Blobs [Исходник н...
BDEPack
Запрет гостям ск...
Игра змейка
Cooltray
API (Применение A...
Советы от Даниилы...
Х. М. Дейтел, П. ...
Delphi. Готовые а...

Топ загрузок
Приложение Клие... 100532
Delphi 7 Enterp... 92125
Converter AMR<-... 20103
GPSS World Stud... 15532
Borland C++Buil... 13126
Borland Delphi ... 9195
Turbo Pascal fo... 7115
Калькулятор [Ис... 5219
Visual Studio 2... 5037
FreeSMS v1.3.1 3561
Случайные статьи
Как самому написат...
Алфавит языка Obje...
Структуризация сис...
Иерархия классов
Источник данных
Функции
10.3. Форма запис...
Здесь такжерассмот...
1.5.2 Составление ...
• Бизнес-процессы
Обычный режим UNICAST
Списки с потоками
Геометрические фигуры
Платформа Mac
Веб-программирован...
Типы raw
Выработка решенияП...
Практическая реали...
Уравнение теплопро...
Это разрешение буд...
Работа с массивами...
Нерешенные вопросы
Поле "Скрытая" при...
ей право сбрасыват...
Пространства имен
Статистика



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


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