Навигация
Главная
Поиск
Форум
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
Содержание сайт... 65535
Вызов хранимых ... 65535
Эмулятор микроп... 65535
Приложение «Про... 64066
Организация зап... 62739
Оператор выбора... 62511
Invision Power ... 62156
Подключение Mic... 60914
Модуль Forms 59875
Создание отчето... 59794
ТЕХНОЛОГИИ ДОСТ... 55983
Программируемая... 55431
Пример работы с... 53078
Имитационное мо... 51362
21 ошибка прогр... 46355
Реклама
Геотермальные системы отопления воздушный насос Геотермальный тепловой насос.
Сейчас на сайте
Гостей: 16
На сайте нет зарегистрированных пользователей

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

Моделирование работы перекрёстка по регулированию движения на GPSS + Поя...
База данных электронного документооборота на Delphi + бд Intebase
Моделирование процесса обработки заданий пакетным режимом работы с квант...

Реклама



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

ПОДПИСЫВАЙСЯ на канал о программировании
Предложения, факты и правила в Турбо Прологе
Турбо Пролог (ТП) накладывает некоторые ограничения на
имена объектов и предикатов, используемых в программах.
Стандартные имена ТП должны состоять не более, чем из 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 21:39:14 · 4 Комментариев · 19556 Прочтений · Для печати

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


Комментарии
Евгений December 08 2009 08:27:42
Блин такая тупость эти языки программирования - не завидую программёрам, особенно этот пролог древний как гов... мамонта... Уже третий день пытаюсь написать прогу для Генеалогического древа... чуш...smiley
Kest December 08 2009 12:39:51
Я думаю многие намучились с прологом в институте
Trick December 14 2009 22:05:02
ага, в точку - в понедельник экзамен, а на этой неделе нужно сделать прогу: Создайте предикат, находящий в исходной строке слово, в котором наибольшее количество русских гласных букв...Ы
Дмитрий December 27 2011 23: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...
Шаблон для новост...

Случайные загрузки
С# для профессион...
Swat [Исходник на...
Visual Basic Script
100 компонентов о...
Delphi 7: Для про...
IIIDTrans
Text effect
CS:Source - монит...
Assistant
FilesInfo
StartMark
MpegPlay
Панель "ссылки"
Microsoft SQL Ser...
TMS
CoolControls v3.0...
Книга по Delphi (...
Шаблон для новост...
Calendar
Язык программиров...

Топ загрузок
Приложение Клие... 100366
Delphi 7 Enterp... 82062
Converter AMR<-... 20046
Borland C++Buil... 11039
GPSS World Stud... 10378
Borland Delphi ... 8030
Turbo Pascal fo... 6957
Visual Studio 2... 4961
Калькулятор [Ис... 4253
FreeSMS v1.3.1 3508
Случайные статьи
Корректность TLB в...
Соглашение о вызовах
Бесплатный игровой...
Сейчас мы хотим ус...
Анализ общей линей...
Написание детских ...
Проиложение А. Эво...
Что может инженер ...
Класс TFont
Функция GlobalMemo...
Документы СС/РР
Если нажать левую ...
Создание избыточно...
Демонтаж конденсатора
Основанные принцип...
Мультиметоды для к...
Клиентские компьют...
Игры. Игромания
Массивы
6.1. Ввод новых ...
Решение головоломк...
Установка встроенн...
Устраните самую кр...
Identifier expected
Найти суммы элемен...
Статистика



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


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