Навигация
Главная
Поиск
Форум
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
21 ошибка прогр... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Имитационное мо... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Реклама
Сейчас на сайте
Гостей: 40
На сайте нет зарегистрированных пользователей

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

Лабораторная работа по динамическим спискам на Turbo Pascal (перемещение...
Моделирование работы участка термической обработки шестерен на GPSS + По...
Моделирование ЭВМ на GPSS (три класса заданий) + Пояснительная записка

Дополнительные встроенные предикаты - МПролог


В МПрологе предусмотрены некоторые дополнительные встроенные предикаты. Например, допускающие повторное согласование при возвратном ходе предикаты ввода, разнообразные предикаты вывода, работы со строками, с базой данных, а также предикаты обработки особых ситуаций.
Два основных предиката ввода insymb(X) и interm(X) допускают повторное согласование при возврате. Это означает, что при возвратном ходе выполненные ими действия «отменяются». Например, если первый вводимый символ не совпадает
с аааа , то вопрос
? insymb(aaaa).



не согласуется, причем в этом случае аааа сохраняется во входном потоке и может быть считан последующими предикатами ввода [21] .
Эти предикаты обеспечивают дополнительные возможности для задания грамматических правил. Например, правила, приведенные в разд. 9.3, могут быть непосредственно преобразованы в следующие предикаты:
предложение:- группа_существительного, группа_глагола.
группа_существительного:- определитель, существительное.
группа_глагола:- глагол.
группа_глагола:- глагол, группа_существительного.
определитель:- insymb(the).
существительное:- insymb(man).
существительное:- insymb(apple).
глагол:- insymb(eats).
глагол:- insymb(sings).



Приведенный выше предикат предложение завершается успешно, если из входного потока поступает предложение, удовлетворяющее заданной грамматике. Заметим, что обработка синтаксических ошибок и команда '=' реализуются на основе предикатов ввода, допускающих повторное согласование при возврате. Предикаты для работы с базой данных в МПрологе также имеют версии, допускающие повторное согласование. Например,
fdelclause(EXPR)



исключает первое утверждение, заголовок которого может быть сопоставлен с EXPR, тогда как
fsupclause(EXPR)



только подавляет его. Это означает, что при возвратном ходе это утверждение возвращается на свое место. С помощью этого предиката можно, например, по-другому определить предикат перейти из разд. 7.2:
перейти(X,X).
перейти(X,X):- в_след_комн(Х,Z), перейти(Z,Y).
в_след_комн(Х,Z):- fsupclause(d(X,Z)); fsupclause(d(Z,X)).



Здесь нам уже не нужен вспомогательный третий аргумент (содержащий список комнат, где мы уже бывали). Вместо этого, чтобы быть уверенным в том, что в каждую дверь мы входим только один раз, мы просто подавляем на период поиска факты, соответствующие дверям, через которые мы уже прошли.
Имеется большой набор предикатов вывода, позволяющий осуществлять разнообразные виды форматированного вывода. Например, можно задавать границы строк и предельную глубину вывода. Задание глубины вывода полезно при выводе очень сложных термов (или даже бесконечных термов поскольку в МПрологе соответствующих проверок не делается), когда нас интересует только их общая структура. Задание глубины вывода равной N означает, что фактически выводиться будут только первые N уровней терма, а подтермы уровня N+1 будут представлены как (…) .
Предикаты обработки особых ситуаций МПролога позволяют программисту самому программировать действия по восстановлению при ошибках. Например, ниже представлен простой вариант средства 'спроси у пользователя', позволяющего запросить у пользователя указания, как продолжать выполнение, если встретился неопределенный предикат.
ask_the_user:- broken _call(С), outterm("How to continue from: "), outterm(C), outterm("?"), nl, interm(C), ineot.



где broken_call(С) - это стандартный предикат, конкретизирующий переменную С ошибочным целевым утверждением. Выполнив целевое утверждение
newhandler("undefined predicate", ask_the_user)



система будет вызывать ask_the_user (спроси_у_пользователя) всякий раз, когда что-либо окажется неопределенным. Например, определив предикаты плотность и нас как в разд. 2.5, но оставив неопределенным предикат площадь:
плотность(X,Y):- нас(X,Р), площадь(X,A), Y is P/A.
нас(китай,800).
. . .
мы можем наблюдать следующий диалог:
*? плотность(китай,D).
How to continue from площадь(китай,_101)?
* площадь(китай,4).
D = 200
Continue (y/n)?
* y
NO
*? плотность(китай,D).
How to continue from площадь(китай,_101)?
* n.
NO



Другой важный встроенный предикат – это error_protect (Call, Handler), который выполняет целевое утверждение Call в защищенном окружении: когда внутри Call возникает особая ситуация (не обрабатываемая текущим обработчиком особых ситуаций), выполняется Handler.

Ищете работу в Днепропетровске? Тогда вам сюда - http://rabota.ua/%D0%B4%D0%BD%D0%B5%D0%BF%D1%80%D0%BE%D0%BF%D0%B5%D1%82%D1%80%D0%BE%D0%B2%D1%81%D0%BA.
Опубликовал Kest July 10 2009 09:03:15 · 0 Комментариев · 6631 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
Использование Lis...
Род Стивенс. Delp...
Архив значков
Мод "проверочный ...
Abc_component
Стелтинг Стивен, ...
Просмотр коммент...
Программирование ...
Система баннеро-о...
TsHintManager
BDEPack
Pass [Исходник на...
Java Server Pages...
AdBlaster v2.5 - ...
Панель случайной ...
ProLIB18
Flash MP3 Player ...
Delphi 2006 - Спр...
MxProtector
Pro-Download Sys...

Топ загрузок
Приложение Клие... 100772
Delphi 7 Enterp... 97809
Converter AMR<-... 20261
GPSS World Stud... 17014
Borland C++Buil... 14189
Borland Delphi ... 10267
Turbo Pascal fo... 7372
Калькулятор [Ис... 5972
Visual Studio 2... 5206
Microsoft SQL S... 3661
Случайные статьи
Фанера ламинированная
Применение модульн...
Большинство модемо...
Профессиональное р...
Работа со списком ...
ENTER (ВОЙТИ В ПАМ...
Аналитические реш...
Too many condition...
Сложность рекурсив...
Статические элемен...
В приведенном ниже...
Язык С: как тестир...
От людей нужно ожи...
ГЛАВА 2 БОЛЕЕ ДЕТ...
Игра в планирование
Приэтом проверяетс...
Вложенные процедуры
Взаимодействие с о...
NetWare можгю, уст...
Университет
Операции на серверах
Почему не нужно бо...
Меню добавления из...
Какие есть адреса ...
Редактирование диз...
Статистика



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


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