Как сделать пролог
Добавил пользователь Дмитрий К. Обновлено: 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(. ). . (. ). . (. ).
Наберите код программы в компиляторе.
Турбо-Пролог использует как внутренние цели, которые содержатся в программе, так и внешние цели, которые вводятся с клавиатуры после запуска программы. Здесь существует два варианта:
- Если цель является фактом, то Турбо-Пролог отвечает True (истина) или False (ложь):
Дословно: Мэри любит яблоки.
- Если цель содержит переменные, то Турбо-Пролог выдает те их значения, которые приводят к решению:
Дословно: Что любит Мэри?
* Понятие переменной в Прологе будет рассмотрено в следующем уроке.
Таким образом, цель состоит из взаимосвязанных предикатов. Ее структура точно такая же, как у факта. Т.е. цель зачастую совпадает с правилом или фактом.
Так, наш пример может быть как фактом, так и целью:
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.
Пролог
Начнем с пролога. Что он собой представляет? Нет, не дополнительную главу и тем более не расширенную аннотацию. Пролог - это вступительная часть произведения, необходимая для одной-единственной цели: завлечь читателя. Подкинуть ему интересную загадку, разгадку которой он захочет искать на страницах книги. Поэтому в прологе не должно быть ничего лишнего.
Неудачный пролог - это:
- Слишком много описаний.Хороший пролог - это короткий пролог. Не надо расписывать его на 10 вордовских страниц. Следовательно, нет нужды в детальных описаниях апартаментов или внешности героев. Читатель помрет с тоски, пока докопается до события, которое должно его завлечь. Старайтесь подать мысль кратко, по существу, без лишних описаний и лирических отступлений.
- Много героев и событий. Некоторые пытаются впихнуть в пролог как можно больше действующих лиц и сразу несколько происшествий. Вопрос: зачем? Такое обилие информации оттолкнет читателя. В хорошем прологе кратко описывается одно событие, являющееся важным элементом для дальнейшего развития сюжета. Например, книга повествует о семье, поселившейся по соседству со странной пустующей квартирой, к которой боятся подходить все жители дома. Отлично, если в прологе вы напишете о том, как некто любопытный сунулся-таки туда, но только не раскрыв основной интриги.
Удачный пролог - это:
- Коротко о главном. Никаких "левых" персонажей и побочных событий. Только завязка основной сюжетной линии, и не на 10 страниц.
- Выдержанная интрига. Возьмем ситуацию со странной квартирой. По замыслу автора, в ней живет призрак деда, который умер от пьянства 10 лет назад под своей кроватью. Тело вовремя не нашли, и дух старика разозлился. Теперь каждый, кто сунется в квартиру, становится его жертвой. Ок, тайна раскрыта. Но если автор еще в аннотации ничего не говорит о призраке, и там фигурирует просто странная квартира, то не устраивайте встречу персонажа со злобным духом прямо в прологе. Пусть он войдет в квартиру, дверь захлопнется у него за спиной, и он что-то услышит в темноте. Или увидит краем глаза. Что или кого он увидел - точно неясно, зато ясно, что в квартире что-то обитает. Читателю захочется узнать больше, и он откроет первую главу.
В качестве пролога может выступать интригующий отрывок из текста книги. Такой прием тоже используется, но весьма редко. Обычно в прологе описывается событие, предшествующее основной сюжетной линии. То, что было ДО введения в повествование ключевых героев. По сути, пролог - это отправная точка. В зависимости от сюжета, в нем может фигурировать ключевой герой, но, опять же, он совершает действие, которое повлечет за собой серьезные последствия. Они, собственно, и будут основным элементом всей книги.
Эпилог
Эпилог - это финальная часть книги, идущая за последней главой. В эпилоге подводится итог всему повествованию, раскрываются оставшиеся тайны и ставится окончательная точка в развитии событий. В некоторых книгах финал может остаться открытым, но читатель все равно должен понять, что история завершена. У него не должно остаться вопросов. Можно часами додумывать, какой будет дальше жизнь героев, но все-таки их путь, описываемый на протяжении романа, должен быть завершен.
Неудачный эпилог - это:
- Нераскрытые тайны. О том, что убийца - дворецкий, читатель может и сам догадаться к концу книги, но автор все равно должен его обличить. Даже если хитроумный служащий удачно избежит правосудия, не должно остаться сомнений, что людей убил именно он.
- Забытые второстепенные герои. ГГ счастливы, у них медовый месяц и ребенок на подходе, - замечательно. А что насчет других героев, менее значимых, но все же регулярно появлявшихся на страницах книги? Часто - очень часто! - друзья ГГ, враги, соперники и прочие, кто повлиял на развитие сюжета, просто исчезают в небытии. Совсем не редкий случай, когда читателю нравится не ГГ, а, например, его сестра, сыгравшая в книге немаловажную роль. Думаю, он заслуживает узнать, как в итоге сложилась ее жизнь. Не забывайте о тех, кто фигурировал в романе не в качестве массовки. Не все любят ГГ, далеко не все.
- Раскрытие тайн в скоростном режиме. Вы замечательно выдержали интригу вплоть до эпилога, не давая даже крохотных намеков, и вдруг в финале вываливаете на голову читателю бурный поток информации. Буквально в двух абзацах признаетесь, что убийца - дворецкий, дочь герцога беременна от конюха, а в подвале дома живет крыса-мутант. Ок, это интересно, но постарайтесь дотянуть до эпилога не все интриги, а только одну - основную. Остальные же лучше начать постепенно раскрывать во второй половине своего романа.
Удачный эпилог - это:
- Коротко о главном. Тот же пункт, что и в прологе, и то же правило: не растягивайте эпилог до размеров главы. Вы ставите точку, а не продолжаете размеренное повествование. Ваша задача - раскрыть последнюю тайну (если не сделали этого в финальной главе) и кратко рассказать о судьбах героев. Всё.
- Логичное завершение истории. Убийца вычислен, влюбленные поженились, сестра ГГ сделала карьеру в Париже, крысы уничтожены, призраки изгнаны. Не оставляйте загадок. Вы дошли до финала - не тормозите, когда остался шаг.
Исключение: открытый финал. В этом случае можно, как и в прологе, сконцентрировать внимание на одном-двух героях. Помните концовки старых ужастиков? Гигантская рептилия уничтожена, но в самом конце мы видим яйцо, которое она успела отложить, и из него только что вылупился змееныш. Да, финалы могут быть и такими, но при условии, что автор сказал ранее - в предпоследних главах или в последней, - как сложились судьбы героев.
Помните, что эпилог подводит окончательный итог в формировании мнения читателя о книге. Если у него останутся вопросы, он получит неудовлетворение, и вряд ли придет к вам снова. Постарайтесь не доводить до этого.
Пролог и эпилог в цикле романов
Здесь все зависит от концепции самого цикла. Если каждую книгу в нем можно читать как самостоятельное произведение, почему бы не использовать в них эти части? В новом томе вы начинаете новую историю, а значит, интересная завлекалочка и подведение итогов не станут лишними.
Если же цикл представляет собой непрерывное повествование о жизни конкретных героев, и каждый следующий том продолжает историю предыдущего, то пролог будет уместен только в первой книге, а эпилог - в последней. По сути, это один, пусть и очень длинный, роман, в котором не должно быть 10 завязок и столько же финалов. Читатель решает, переходить ли ему к следующему тому, исходя из впечатлений о предыдущем. Если он хочет узнать дальнейшее развитие событий, то просто открывает следующую книгу. Ему не нужен для этого пролог. А если вы подведете итоги, но потом запилите новый том, в котором, оказывается, идет прямое продолжение сюжетной линии из прошлой книги, то эпилог между этими отрезками будет так же уместен, как седло на коровьей спине.
Использовать эти части повествования в своих книгах или нет, авторы решают сами. Кто-то хорошо обходится без них, кому-то они необходимы. Но если решили разместить их в книге, то помните о важности, которую они в ней сыграют. Нудный пролог оттолкнет читателя, а "недоделанный" эпилог его расстроит.
Читайте также: