Domains
name, sport =string
…
Во время исполнения программы при включенной трассировке в специальном окне трассировки будет отображаться следующая информация:
- после слова "CALL" будет указано имя выполняемого предиката (текущая подцель) и его параметры, например: CALL: likes(”Олег”, _ );
- после слова "FAIL" будет выводиться имя текущей подцели, которая не была достигнута;
- после слова "RETURN" будет выводиться результат вычисления текущей подцели, в случае успеха. При этом если у подцели есть еще альтернативы, к которым возможен возврат, то перед именем предиката высвечивается звездочка ("*");
- слово "REDO" перед именем предиката указывает на то, что произошел возврат и происходит вычисление альтернативного решения.
Переход от подцели к подцели вызывается нажатием функциональной клавиши F10. При этом в окне редактирования выполняющуюся подцель указывает курсор, она также отображается в окне трассировки с параметрами и дополнительной информацией.
Директива nowarnings используется для подавления предупреждения системы о том, что какая-то переменная встречается в предложении только один раз. Эту директиву стоит использовать только в хорошо отлаженных программах. Как правило, для подавления предупреждения:"WARNING: The variable is only used once" достаточно заменить переменную, которая встретилась только один раз, на анонимную переменную.
С помощью директивы include при компиляции в исходный текст можно вставить содержимое некоторого файла.
Многие директивы компилятора могут быть не только расположены в тексте программы, но и установлены в меню среды разработки Турбо Пролога (Options->Compiler->Directives). Значение директивы компилятора, указанное в тексте программы, имеет более высокий приоритет, чем значение, установленное в меню.
Описание задачи на Турбо-Прологе
Основные понятия Турбо-Пролога
Пролог – это язык программирования, предназначенный для представления и использования знаний о некоторой предметной области. Под предметной областью понимается множество рассматриваемых объектов и совокупность знаний о них. Любую взаимосвязь между объектами и (или) их свойствами называется отношением.
Объекты могут быть объединены в классы, обладающие определенными свойствами. Элементы этих классов являются конкретными объектами предметной области. Для представления конкретного объекта в программе на Прологе используется константа. Константа – это число или символическое имя объекта. Примеры констант: mary, 54, 8.09, ”Иванов”.
Символическое имя (атом) – это неразрывная цепочка латинских букв, цифр и символа подчеркивания, начинающаяся со строчной латинской буквы.
Для именования объектов и их свойств могут использоваться строки – последовательности любых символов, заключенных в двойные кавычки.
Для описания в программе некоторого объекта, принадлежащего определенному классу, используется переменная. Переменная в программе представляется своим именем. Имя переменной в Прологе – это цепочка латинских букв или цифр, начинающихся с прописной латинской буквы. Примеры имен переменных: F, Dog, St7.
Чтобы описать отношение, необходимо указать его имя и перечислить либо классы объектов, либо конкретные объекты, связываемые с этим отношением.
<имя отношения>(<имя объекта 1>,…,<имя объекта n>)
Отношение характеризуется именем и числом аргументов (число классов объектов, связанных этим отношением). Для описания отношений в программе на Прологе используются предикаты.
Предикат – это логическая функция от n аргументов, имеющая только два значения ”истина” и ”ложь”. Синтаксис предиката:
<имя предиката>(<аргумент 1>,…,<аргумент n>)
При описании имя предиката совпадает с именем отношения, а аргументы предиката – это связываемые отношением объекты. Если описываемое предикатом отношение имеет место в предметной области, то предикат принимает значение ”истина”, иначе значение предиката ”ложь”. В качестве имени предиката используется цепочка латинских букв и цифр, начинающихся со строчной латинской буквы. Допустимо использовать знак подчеркивания. Примеры предикатов: likes(mary, sport), bank_book(“Таня”, 1000).
Знания о предметной области выражаются на языке Пролог в виде предложений, называемых утверждениями (CLAUSES). Каждое утверждение заканчивается точкой и описывает какое-либо отношение, свойство, объект или закономерность. Структура утверждения имеет одну из форм:
<заголовок> . /*факт*/
или
<заголовок> :- <тело> . /*правило*/
где заголовок является предикатом и полностью характеризует описываемое отношение.
Телоутверждения состоит либо из одного предиката, либо из списка предикатов, разделенных знаками ”,” , ”;” , ”not”, соответствующим логическим операциям ”и”, ”или”, ”не”. Таким образом, тело утверждения является логическим выражением. Каждый входящий в это выражение предикат описывает какое-либо отношение. Знак ”:-” соответствует слову ”если”. Утверждение читается так: «Отношение, стоящее в заголовке будет истинным, если истинно логическое выражение, находящееся в теле утверждения».
Факты
Все утверждения программы на Прологе делятся на факты, правила и запросы. Факты отражают текущее состояние предметной области, содержат конкретную информацию и являются истинными предикатами. Факты соответствуют простым безусловным высказываниям.
Синтаксически правильно записанный факт имеет следующую структуру предиката:
<имя отношения> (<список аргументов>).
В списке аргументов перечисляются имена объектов (не более 255), связанных данным отношением. Аргументы в списке отделяются друг от друга запятыми, в некоторых случаях могут отсутствовать. Если аргумент представляет собой имя конкретного объекта (свойства) или число, то он является константой Пролога.
Определяя с помощью фактов отношения между объектами, необходимо учитывать порядок, в котором перечисляются их имена внутри круглых скобок. Следует учитывать, что одно и то же утверждение, записанное в виде фактов, может по-разному интерпретироваться. Только автор программы определяет истинную интерпретацию имен объектов и порядок следования аргументов, и им он должен следовать в процессе написания всей программы, отражая в комментариях смысл записанных им высказываний. Комментарий – это текст, заключенный между символами “/* … */”или строка, начинающаяся со знака “%”.