Как сделать пролог

Добавил пользователь Дмитрий К.
Обновлено: 04.10.2024

Для начала вспомним нормальную форму Бэкуса-Наура (БНФ), которая была создана для формального описания синтаксиса языков программирования в 1960 году. Ее авторы — Джон Бэкус и Питер Наур.

Итак, в БНФ приняты следующие обозначения:

Части выражения, используемые для обозначения синтаксической конструкции языка, берутся в угловые скобки; в нашем примере это и .

Используя данный символ можно, например, определить десятичную цифру:

Если часть конструкции заключена в квадратные скобки [] , то это означает, что она является необязательной, т.е. может отсутствовать.

говорит о том, что целое число можно объяснить как положительное целое число, перед которым может стоять знак минус (а может и не стоять).

Символ * указывает на то, что стоящая перед ним синтаксическая конструкция может повторяться произвольное количество раз (начиная с ноля и выше). Вместо символа * иногда используются фигурные скобки ( ), по сути равнозначные ему.

Снова определим положительное целое число, используя нотацию БНФ :

Что означает, что положительное целое число состоит из одной или нескольких цифр.

Структура программы на языке Prolog

Стандартная программа на языке Prolog состоит из следующих разделов:

Необязательный раздел определения констант.

Раздел описания доменов (аналогичен описанию типов данных).

В Turbo Prolog можно выделить простые типы данных:
char — символьный тип
integer — целое число
real — вещественное число
string — последовательность символов типа char, которая заключена в кавычки
symbol — последовательность букв латинского алфавита, цифр и знаков подчеркивания, которая начинается со строчной буквы (тогда без кавычек) или заключена в кавычки (тогда можно с прописной буквы)

Раздел описания предикатов (аналогичен разделу описания процедур и функций); по сути представляет собой шаблон написания фактов в разделе Clauses.

Утверждения (аналог: тело основной программы).

domains a=symbol predicates likes (a,a) clauses likes (mary,apples).

Перейдите в окно Dialog (меню Run ) и введите запрос:

В результате в окне должен появиться ответ true

Факты и правила

Часто программу, написанную на Прологе, называют базой знаний.

База знаний на Прологе состоит из предложений, т.е. утверждений, каждое из которых завершается точкой.

Предложения-правила имеют вид:

Где A — это заголовок или голова предложения, а B1. Bn – это тело.

  • отношения
  • объекта или объектов, заключенных в круглые скобки (аргументы)
  • завершается точкой (.)

Пример факта:

likes (bill, dogs).

где likes — факт
bill , dogs — аргументы факта, между которыми выполнено отношение ( likes )

Таким образом, предикат (факт) может состоять либо только из имени, либо из имени и следующей за ним последовательности параметров (аргументов), которые заключаются в скобки.

Если факт состоит только из заголовка, то можно сказать, что факт – это предложение, у которого тело пустое.

Аргументом факта или предиката может быть константа, переменная или составной объект; от их числа зависит так называемая местность (n-местность) факта.

Отличие константы от переменной: константа получает свое значение в разделе описания констант, тогда как переменная инициализируется в процессе работы программы.

В TProlog имя предиката или факта может содержать: латинские буквы, цифры, знаки подчеркивания и начинаться с буквы или знака подчеркивания.

В следующем примере наводите курсор на части конструкций, и появится подсказка:

likes (bill, dogs). - Билл любит собак.
bird (vorobej). Птица – воробей.

domains a=symbol b=integer predicates age(a,b) clauses age(. ). . (. ). . (. ).

Наберите код программы в компиляторе.

Турбо-Пролог использует как внутренние цели, которые содержатся в программе, так и внешние цели, которые вводятся с клавиатуры после запуска программы. Здесь существует два варианта:

  1. Если цель является фактом, то Турбо-Пролог отвечает True (истина) или False (ложь):

Дословно: Мэри любит яблоки.

  1. Если цель содержит переменные, то Турбо-Пролог выдает те их значения, которые приводят к решению:

Дословно: Что любит Мэри?

* Понятие переменной в Прологе будет рассмотрено в следующем уроке.

Таким образом, цель состоит из взаимосвязанных предикатов. Ее структура точно такая же, как у факта. Т.е. цель зачастую совпадает с правилом или фактом.

Так, наш пример может быть как фактом, так и целью:

likes(mary,apples). — Мэри любит яблоки и Любит ли Мэри яблоки?

Алгоритм составления программы

Программа для компилятора TProlog состоит из разделов, рассмотренных в примере:

predicates likes (a,a)

clauses likes (mary,apples). likes(mary,oranges). color(apples,red).

goal likes(mary,X),write("mary lyubit ", X).

В данном примере цель записана в виде раздела GOAL прямо в программе, но нужно иметь в виду, что чаще всего цели, требующие логический ответ (правда или ложь), записываются в окне Dialog (goal в программе тогда не пишется)

Бесконечный цикл

В примере, описанном выше, в результате выдается значение только первого из трех фактов:

clauses likes (mary,apples). likes(mary,oranges). color(apples,red). goal likes(mary,X),write("mary lyubit ", X).

Результат выдает только apples . Хотя еще есть oranges.

Чтобы выдать все значения, необходимо организовать бесконечный цикл, который в коде выглядит как оператор fail , установленный в конце раздела GOAL

Раздел gaol того же примера, но с бесконечным циклом будет выглядеть так:

goal likes(mary,X),write("mary lyubit ", X),nl,fail.

Код программы целиком:

domains a=symbol predicates likes (a,a) clauses likes (mary,apples). likes(mary,oranges). color(apples,red). goal likes(mary,X),write("mary lyubit ", X),nl,fail.

Рассмотрим еще один пример.

Код программы без запросов:

domains a=symbol predicates построил (a,a) хранится (a,a) ворует (a,a) ловит (a,a) треплет (a,a) доит (a,a) бранится (a,a) будят (a,a) clauses построил (джек,дом). хранится (пшеница, чулан_дома). ворует (птица_синица, пшеница). ловит (кот, птица_синица). треплет (кот, птица_синица). треплет (пес, кот). доит (старушка, корова). бранится (пастух, старушка). будят (два_петуха, пастух).

Что такое Пролог и как его написать в книге? ? Пишу книгу, подскажите у меня есть начало истории, т. е описание событий с чего всё началось. Т. е история начала относиться к Прологу? ? или как? И вообще как это записать.. . типа
Пролог
Глава 1:
часть 1: Сложный выбор
Или как подскажите срочно? ?

эм.. т.е Сначало идёт одно время, ну я к примеру возьму действие истории будет происходить в прошлом описание с чего всё началось, так сказать из свов автора и ни каких диалогов, а уже в настоящем будет сюжет описание действия персонажей. событий, диалог и т.п.
Получается, как я понял сначала:

Друзья! В связи с большим количеством писем по данному разделу, хочу сообщить, что в настоящее время (апрель 2020 года) планирую активно развивать раздел, посвящённый SWI–Prolog-у. Данный Prolog может показать кому-то не очень удобным в освоении и использовании, но это только на первый взгляд. Это достаточно мощная и активно развивающаяся реализация Prolog и к тому же - бесплатная. Конечно, это только моё мнение

 Архитектура Сознания - ПРОКАЧАЙ!


Пролог и эпилог - не принципиальные, но все же важные части книги. Нет ничего страшного, если автор их вообще не использует. Честно говоря, это даже лучше, чем неумелое включение сих частей в текст книги. Неудачный пролог может убить на корню желание читателя посвятить время конкретному произведению. Неудачный эпилог, в свою очередь, может испортить все впечатления о книге.

Некоторые ошибочно думают, что в написании этих частей нет ничего сложного. Действительно, что может быть проще, чем кинуть в начале коротенькую затравку, а в конце подвести итоги? Как бы не так! На самом деле, куда проще написать главу в 25k знаков, чем пролог - в 2k.

Пролог

Начнем с пролога. Что он собой представляет? Нет, не дополнительную главу и тем более не расширенную аннотацию. Пролог - это вступительная часть произведения, необходимая для одной-единственной цели: завлечь читателя. Подкинуть ему интересную загадку, разгадку которой он захочет искать на страницах книги. Поэтому в прологе не должно быть ничего лишнего.

Неудачный пролог - это:

  1. Слишком много описаний.Хороший пролог - это короткий пролог. Не надо расписывать его на 10 вордовских страниц. Следовательно, нет нужды в детальных описаниях апартаментов или внешности героев. Читатель помрет с тоски, пока докопается до события, которое должно его завлечь. Старайтесь подать мысль кратко, по существу, без лишних описаний и лирических отступлений.
  2. Много героев и событий. Некоторые пытаются впихнуть в пролог как можно больше действующих лиц и сразу несколько происшествий. Вопрос: зачем? Такое обилие информации оттолкнет читателя. В хорошем прологе кратко описывается одно событие, являющееся важным элементом для дальнейшего развития сюжета. Например, книга повествует о семье, поселившейся по соседству со странной пустующей квартирой, к которой боятся подходить все жители дома. Отлично, если в прологе вы напишете о том, как некто любопытный сунулся-таки туда, но только не раскрыв основной интриги.

Удачный пролог - это:

  1. Коротко о главном. Никаких "левых" персонажей и побочных событий. Только завязка основной сюжетной линии, и не на 10 страниц.
  2. Выдержанная интрига. Возьмем ситуацию со странной квартирой. По замыслу автора, в ней живет призрак деда, который умер от пьянства 10 лет назад под своей кроватью. Тело вовремя не нашли, и дух старика разозлился. Теперь каждый, кто сунется в квартиру, становится его жертвой. Ок, тайна раскрыта. Но если автор еще в аннотации ничего не говорит о призраке, и там фигурирует просто странная квартира, то не устраивайте встречу персонажа со злобным духом прямо в прологе. Пусть он войдет в квартиру, дверь захлопнется у него за спиной, и он что-то услышит в темноте. Или увидит краем глаза. Что или кого он увидел - точно неясно, зато ясно, что в квартире что-то обитает. Читателю захочется узнать больше, и он откроет первую главу.

В качестве пролога может выступать интригующий отрывок из текста книги. Такой прием тоже используется, но весьма редко. Обычно в прологе описывается событие, предшествующее основной сюжетной линии. То, что было ДО введения в повествование ключевых героев. По сути, пролог - это отправная точка. В зависимости от сюжета, в нем может фигурировать ключевой герой, но, опять же, он совершает действие, которое повлечет за собой серьезные последствия. Они, собственно, и будут основным элементом всей книги.

Эпилог

Эпилог - это финальная часть книги, идущая за последней главой. В эпилоге подводится итог всему повествованию, раскрываются оставшиеся тайны и ставится окончательная точка в развитии событий. В некоторых книгах финал может остаться открытым, но читатель все равно должен понять, что история завершена. У него не должно остаться вопросов. Можно часами додумывать, какой будет дальше жизнь героев, но все-таки их путь, описываемый на протяжении романа, должен быть завершен.

Неудачный эпилог - это:

  1. Нераскрытые тайны. О том, что убийца - дворецкий, читатель может и сам догадаться к концу книги, но автор все равно должен его обличить. Даже если хитроумный служащий удачно избежит правосудия, не должно остаться сомнений, что людей убил именно он.
  2. Забытые второстепенные герои. ГГ счастливы, у них медовый месяц и ребенок на подходе, - замечательно. А что насчет других героев, менее значимых, но все же регулярно появлявшихся на страницах книги? Часто - очень часто! - друзья ГГ, враги, соперники и прочие, кто повлиял на развитие сюжета, просто исчезают в небытии. Совсем не редкий случай, когда читателю нравится не ГГ, а, например, его сестра, сыгравшая в книге немаловажную роль. Думаю, он заслуживает узнать, как в итоге сложилась ее жизнь. Не забывайте о тех, кто фигурировал в романе не в качестве массовки. Не все любят ГГ, далеко не все.
  3. Раскрытие тайн в скоростном режиме. Вы замечательно выдержали интригу вплоть до эпилога, не давая даже крохотных намеков, и вдруг в финале вываливаете на голову читателю бурный поток информации. Буквально в двух абзацах признаетесь, что убийца - дворецкий, дочь герцога беременна от конюха, а в подвале дома живет крыса-мутант. Ок, это интересно, но постарайтесь дотянуть до эпилога не все интриги, а только одну - основную. Остальные же лучше начать постепенно раскрывать во второй половине своего романа.

Удачный эпилог - это:

  1. Коротко о главном. Тот же пункт, что и в прологе, и то же правило: не растягивайте эпилог до размеров главы. Вы ставите точку, а не продолжаете размеренное повествование. Ваша задача - раскрыть последнюю тайну (если не сделали этого в финальной главе) и кратко рассказать о судьбах героев. Всё.
  2. Логичное завершение истории. Убийца вычислен, влюбленные поженились, сестра ГГ сделала карьеру в Париже, крысы уничтожены, призраки изгнаны. Не оставляйте загадок. Вы дошли до финала - не тормозите, когда остался шаг.

Исключение: открытый финал. В этом случае можно, как и в прологе, сконцентрировать внимание на одном-двух героях. Помните концовки старых ужастиков? Гигантская рептилия уничтожена, но в самом конце мы видим яйцо, которое она успела отложить, и из него только что вылупился змееныш. Да, финалы могут быть и такими, но при условии, что автор сказал ранее - в предпоследних главах или в последней, - как сложились судьбы героев.

Помните, что эпилог подводит окончательный итог в формировании мнения читателя о книге. Если у него останутся вопросы, он получит неудовлетворение, и вряд ли придет к вам снова. Постарайтесь не доводить до этого.

Пролог и эпилог в цикле романов

Здесь все зависит от концепции самого цикла. Если каждую книгу в нем можно читать как самостоятельное произведение, почему бы не использовать в них эти части? В новом томе вы начинаете новую историю, а значит, интересная завлекалочка и подведение итогов не станут лишними.

Если же цикл представляет собой непрерывное повествование о жизни конкретных героев, и каждый следующий том продолжает историю предыдущего, то пролог будет уместен только в первой книге, а эпилог - в последней. По сути, это один, пусть и очень длинный, роман, в котором не должно быть 10 завязок и столько же финалов. Читатель решает, переходить ли ему к следующему тому, исходя из впечатлений о предыдущем. Если он хочет узнать дальнейшее развитие событий, то просто открывает следующую книгу. Ему не нужен для этого пролог. А если вы подведете итоги, но потом запилите новый том, в котором, оказывается, идет прямое продолжение сюжетной линии из прошлой книги, то эпилог между этими отрезками будет так же уместен, как седло на коровьей спине.

Использовать эти части повествования в своих книгах или нет, авторы решают сами. Кто-то хорошо обходится без них, кому-то они необходимы. Но если решили разместить их в книге, то помните о важности, которую они в ней сыграют. Нудный пролог оттолкнет читателя, а "недоделанный" эпилог его расстроит.

Читайте также: