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

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

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

Предложения, факты и правила в Турбо Прологе
Турбо Пролог (ТП) накладывает некоторые ограничения на
имена объектов и предикатов, используемых в программах.
Стандартные имена ТП должны состоять не более, чем из 250
символов, среди которых допускаются буквы латинского
алфавита (A,...,Z; a,...,z), цифры (1,...,9,0) и знак
подчеркивания. Имена атомов и предикатов в ТП должны
начинаться со строчной буквы, а имена объектов_переменных -
с прописной.
Для атомов в ТП допустимы нестандартные имена, которые
заключаются в двойные кавычки и могут содержать любые
символы. Это позволяет использовать при именовании
объектов-атомов прописные буквы (например, "Pentium",
"Moscow", "Peter"), символы национальных алфавитов
(например, кириллицу - "Рязань", "компьютер") и
разделительные пробелы (например, "Intel 80486",
"Manchester United", "Рязанская радиотехническая
академия").
Среди объектов-переменных выделяется анонимная
переменная, обозначаемая одним символом подчеркивания.
Подобная переменная не требует выделения памяти под
хранение ее значения и после выполнения текущей операции
это значение теряется.
Язык ТП допускает шесть стандартных типов объектов
(данных), приведенных в табл.1. На базе этих стандартных
типов пользователь может конструировать свои собственные
типы данных (см. раздел domains в п.2.2). Символьные данные
типов symbol и string отличаются способом хранения. При
объявление типа данных symbol ТП-система выполняет
построение в оперативной памяти ПЭВМ таблицы симовлов, что
обеспечивает наиболее быстрый поиск информации. При
использовании данных типа string построение подобной
таблицы не выполняется.

В программах на ТП допускается использование
комментариев, которые могут располагаться в произвольном
месте. В ТП существуют два вида комментариев: многострочные
и однострочные. Многострочный комментарий начинается с
последовательности символов "/*" и заканчивается символами
"*/". Однострочный комментарий начинается с символа "%",
который может располагаться в любом месте строки.
Информация, расположенная после этого символа до конца
строки, воспринимается как комментарий.
Основная часть программы на ТП (раздел clauses - см.
п.2.2) состоит из предложений. Каждое предложение может
включать в себя один или несколько предикатов, соединенных
логическими операциями, и должно заканчиваться точкой.
Предложение может располагаться на нескольких строках.
Различают безусловные и условные предложения.
Безусловное предложение называется фактом и состоит из
единственного предиката, определяющего наличие указанного
отношения между конкретными объектами-атомами, заданными в
качестве аргументов предиката. Предложение-факт не зависит
от каких-либо условий и является всегда истинными.
Условное предложение, называемое правилом, описывает
отношение, возникающее при наличии определенных условий.
Правило представляет собой сложное предложение, которое
состоит из заголовка и тела правила. В заголовке
описывается предикат, для которого сформулировано правило,
а тело правила описывает условия, при которых отношение,
определяемое предикатом, существует (т.е. предикат
истинен). Заголовок и тело правила соединяется при помощи
ключевого слова if (если) или пары символов ":-". Тело
правила может включать несколько предикатов, которые
соединяются между собой при помощи логических операций or
(и) и and (или). Ключевые слова or и and могут быть
заменены символами ";" и "," соответственно. Сложные
правила (например, рекурсивные) могут состоять из
нескольких предложений.
Например, предложение-факт like (tom, footbal)
свидетельствует о том, что между объектами tom и footbal
существует отношение like. Если перевести данный предикат
из эдинбургского синтаксиса в обычную (инфиксную) форму
записи для бинарных отношений, то получается предложение:
tom like footbal.
Если затем перевести его на русский язык, то получим
следующее утверждение (факт):
Тому нравится футбол.
Аналогичным образом можно интерпретировать факты
model(car, volvo, 1992), situation_in("Рязань", "Россия"),
или parent(tom, peter), man (tom).
Наиболее распространены в литературе по Прологу
примеры правил, связанных с определением родственных
отношений. Например, имея факты об отношениях родитель
(parent) и о поле объектов (man, lady), можно легко
записать правило определения отца:
father (X,Y) if parent (X,Y) and (X)
Или в сокращенном виде:
father (X,Y):- parent (X,Y), man (X).
Формально данная запись читается следующим образом:
отношение father между объектами X и Y существует в том
случае, если между этими же объектами существует отношение
parent, и для объекта X существует унарное отношение man.
Иными словами: X является отцом Y, если X - родитель Y и
мужчина.
Аналогично можно определить и другие родственные
отношения, например:
mother (X,Y):- parent (X,Y), lady (X).
brother (X,Y):- parent (Z,X), parent (Z,Y), man (X),X<>Y.
sister (X,Y):- parent (Z,X), parent (Z,Y), lady (X),X<>Y.



Если определены отношения брат (brother) и сестра (sister),
то ниже в тексте программы данные предикаты можно
использовать при определении новых правил, например, для
отношений тетя (aunt) и дядя (uncle):
aunt (X,Y):- sister (X,Z), parent (Z,Y).
uncle (X,Y):- brother (X,Z), pfrent (Z,Y).



Обратите внимание на то, что при определении правил в
качестве аргументов всех предикатов используются
абстрактные объекты - переменные, начинающиеся с большой
буквы. Таким образом обеспечивается применимость правил ко
всем объектам данного типа (в примере - ко всем именам
родственников).
Для построения более сложных отношений используются
рекурсивные правила. Рекурсивное правило отличается от
обычного тем, что в его теле исgользуется предикат,
определенный в заголовке правила. Рекурсивные правила
используются для организации итерационных процессов.
Примером рекурсивного правила может служить отношение
ancestor (предок) для примера с деревом родственных
отношений (определение предка в любом колене):
ancestor (X,Y):- parent (X,Z).
ancestor (X,Z):- parent (X,Y), ancestor (Y,Z).



Данное правило состоит из двух предложений, первое из
которых определяет ближайшего предка - родителя (начало
итерационного процесса), а второе - рекурсивное правило
"предок предка" (тело итерационного процесса). Данный
пример можно рассматривать в более общем плане - как
графовую модель (объекты - вершина, предикаты - дуги).
Тогда предикат ancestor может быть использован при
построении путей в графе, для проверки достижимости вершин
и т.п.
В общем виде подобное отношение можно представить в
форме обобщенного правила рекурсии:
[pr_name()[:-<значение>].]
pr_name():-[,]
,
[,]
pr_name(),
[].



Обобщенное правило рекурсии для предиката pr_name со
списком аргументов должно обязательно содержать в
своем теле ссылку на себя (pr_name()) и предикат,
определяющий условие выхода fin_pr. Остальные предикаты (по-
следовательности предикатов pr1, pr2 и pr3) не влияют на вы-
полнение рекурсии и не являются обязательными. Граничные
значения могут устанавливаться отдельным предложением (первое
предложение правила), как это было в случае с предикатом
ancestor.
В качестве другого примера рекурсивного правила
рассмотрим предикат, выполняющий ввод символов с клавиатуры
и отображение их на экран до тех пор, пока не появится
символ '#':
read_symbol :- readchar(C), % pr1 - принять символ
C<>'#', % fin_pr - условие завершения
write(C), % pr2 - отобразить символ
read_symbol. % рекурсивный вызов
% pr3 - отсутствует



Опубликовал Kest April 02 2009 18:39:14 · 4 Комментариев · 22900 Прочтений · Для печати

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


Комментарии
Евгений December 08 2009 05:27:42
Блин такая тупость эти языки программирования - не завидую программёрам, особенно этот пролог древний как гов... мамонта... Уже третий день пытаюсь написать прогу для Генеалогического древа... чуш...smiley
Kest December 08 2009 09:39:51
Я думаю многие намучились с прологом в институте
Trick December 14 2009 19:05:02
ага, в точку - в понедельник экзамен, а на этой неделе нужно сделать прогу: Создайте предикат, находящий в исходной строке слово, в котором наибольшее количество русских гласных букв...Ы
Дмитрий December 27 2011 20:46:03
В строке описи дяди и тети, описка. в последнем предложении, следует вместо pfrent( Z, Y ). надо писать parent( Z, Y).
Добавить комментарий
Имя:



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

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

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

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

Пароль



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

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

Случайные загрузки
DAlarm
Berg
около 291 статьи ...
Delphi World 6.0
Assembler. Практикум
Размещение элемен...
oTextrackBar
Паскаль и Дельфи....
C# Учебный курс
Сапёр
Функции Visual Basic
Популярные загрузки
Ведение справочны...
Панель для реклам...
Основы Delphi. Пр...
PHP/MySQL для нач...
CS:Source - монит...
Strawberry Prolog...
Библия хакера 2. ...
Графика в проекта...

Топ загрузок
Приложение Клие... 100774
Delphi 7 Enterp... 97836
Converter AMR<-... 20268
GPSS World Stud... 17014
Borland C++Buil... 14191
Borland Delphi ... 10291
Turbo Pascal fo... 7374
Калькулятор [Ис... 5984
Visual Studio 2... 5207
Microsoft SQL S... 3661
Случайные статьи
Настройки с заголо...
Хранение данных в ...
Драйвер ip
Система после упло...
2.1.1. Константы
Решение задачи ман...
Неупорядоченные сп...
7.4. Справочник ...
Отправить письмо н...
Старда казино
таблицы Authors
макроопределение д...
Сердечная и несерд...
Теперь давайте пос...
Регистрация параме...
Использование цикл...
Смена пользователя
Стандартный класс ...
Класс граничных ре...
ПАМЯТИ В GPSS
Стратегия тестиров...
Анализ зависимости...
Приемы синтезаторов.
Онлайн казино Slot...
Обработка ошибок в...
Статистика



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


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