Пролог в литературе

пролог

Пролог Проло́г ( «предисловие» от «впереди, перед» + «слово, речь») — вводная часть, введение, предисловие.

пролог

м.
1.Вступительная, вводная часть литературного, музыкального произведения или спектакля.
2. перен.Начало чего-либо, вступление к чему-либо.

пролог

м.Церковная книга, содержащая жития святых, поучения и т.п., расположенные по дням года.

пролог

I. ( гр. ; см. пролог ) один из жанров древнерусской литературы — сборник, содержащий жития святых, назидательные рассказы и поучения, расположенные по дням года. II. ( гр. prologos pro перед, впереди + logos слово, речь)
1) обращение к зрителям, вступительная часть, подготавливающая зрителей к восприятию спектакля;
2) в литературно-художественном произведении — вводная часть, содержащая рассказ о событиях, предшествовавших основному повествованию, или поясняющая его (противоп. эпилог );
3) перен. начало чего-л., вступление к чему-л.

пролог

м. Церковная книга, содержащая жития святых, поучения и т.п., расположенные по дням года.

пролог пролог

греч. церковная книга, содержащая краткие слова на годичные праздники, жития святых и отрывки нз писаний св. отцев, для чтения при богослужении. | Пролог или пролог введение, вступление, предисловие к сочинению, особенно драматическому. См. также прилагать. Татарский пролог, коран. Он великий учитель: весь пролог наизусть! Ваши слова прямо в Евангелие, а наши и в пролог не годятся!

пролог

Пр`олог, -а (церк. книга)

пролог

прол`ог, -а (вступление)

пролог

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

пролог

(от греч. prologos — вступление), вступительная часть литературного, театрального и музыкально-сценического произведения. В литературном (театральном) прологе рассказывается о событиях, предваряющих и мотивирующих основное действие, или разъясняется художественный замысел, эстетическое кредо автора.

пролог

Пролог м. Церковная книга, содержащая жития святых, поучения и т.п., расположенные по дням года.

пролог пролог

мн. прологи, м. (обл.). Лог, ложбина.

пролог пролог пролог

— (греч. prologos — предисловие, от pro — пред и logos — слово, речь) — часть текста художественного произведения, выходящая за границы сюжета и предваряющая начало действия. Как правило, содержит краткий рассказ о предшествующих событиях или поясняет смысл дальнейшего действия в произведении (например, «Пролог на небесах» и «Пролог в театре» в трагедии И.-В. Гете «Фауст»).

пролог

(греч. prologos, от pro — перед и logos — слово, речь), вступительная часть литературного и театрального произведения, которая предворяет общий смысл, сюжет или основной мотивы произведения или кратко излагает события, предшествующие основному действию ( сюжету ). В античной драме П. — сцена или монолог, передававшие исходную ситуацию или миф, которые послужили основой сюжета. В средневековой мистерии, миракле, моралите — молитва или проповедь, включавшие исходную для пьесы притчу. В драмах Шекспира, Гёте, Шиллера П., наряду с мотивировкой последующих событий, часто содержал эстетическую декларацию автора. П. в современном значении и многообразии жанрового применения складывался начиная с 19 в. (поэма ‘Медный всадник’ Пушкина, роман ‘Ярмарка тщеславия’ Теккерея). Постепенно он всё более смыкался с сюжетом, по существу становясь одним из его элементов: П. повести Н. В. Гоголя ‘Страшная месть’, поэмы Г. Лонгфелло ‘Песнь о Гайавате’, романа И. Г. Эренбурга ‘Необычайные похождения Хулио Хуренито…’ (такой П. в повествовательных жанрах называют иногда Vorgeschichte — предысторией). В отличие от предисловия, П. всегда художествен. В. А. Калашников.

пролог

пролог, -а (вступление)

пролог

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

Русский

В Викиданных есть лексема пролог (L152430).

Морфологические и синтаксические свойства

падеж ед. ч. мн. ч.
Им. проло́г проло́ги
Р. проло́га проло́гов
Д. проло́гу проло́гам
В. проло́г проло́ги
Тв. проло́гом проло́гами
Пр. проло́ге проло́гах

про-ло́г

Существительное, неодушевлённое, мужской род, 2-е склонение (тип склонения 3a по классификации А. А. Зализняка).

Корень: —.

Произношение

  • МФА:

Семантические свойства

Значение

  1. филол. факультативный элемент сюжета эпического произведения, знакомящий читателя с кем-либо из участников, местом или общими обстоятельствами будущего сюжетного действия ◆ Отсутствует пример употребления (см. рекомендации).
  2. филол. начальный элемент в структуре древнегреческой комедии, а затем европейских драматических произведений разных жанров, предназначенный для краткого разъяснения содержания и смысла пьесы ◆ Отсутствует пример употребления (см. рекомендации).

Синонимы

  1. предисловие
  2. введение

Антонимы

  1. эпилог
  2. послесловие

Гиперонимы

Гипонимы

Родственные слова

Ближайшее родство

Этимология

Происходит от др.-греч. πρόλογος «вступительная часть в трагедии и комедии, начиная с Эврипида — вступительный монолог к трагедии», далее от ??

Фразеологизмы и устойчивые сочетания

    Перевод

    Список переводов

    Библиография

      Для улучшения этой статьи желательно:

      • Добавить описание морфемного состава с помощью {{морфо-ru}}
      • Добавить пример словоупотребления для значения с помощью {{пример}}
      • Добавить гиперонимы в секцию «Семантические свойства»
      • Добавить хотя бы один перевод в секцию «Перевод»

      — Чем же он удивительный? Я знаю пару десятков языков и для меня не проблема изучить еще один новый, я просто уже не вижу необходимости.
      Пролог — уникален. Это единственный язык представляющий парадигму декларативного программирования; это язык, который имеет сотни различных имплементаций, но они все равно называются Prolog, добавляя лишь префиксы и суффиксы к названию; это живой язык в котором не происходит никаких существенных изменений более 20 лет; это, наверное, единственный настолько популярный язык программирования, который не имеет применения в реальном программировании. Почему же Prolog?
      Пролог — уникален по своей природе, он появился благодаря счастливому совпадению (таинственному устройству мира). Когда-то в 60-х годах очень бурно развивалась теория автоматического доказательства теорем и Робинсоном был предложен алгоритм резолюций, который позволял доказать любую верную теорему (вывести из аксиом) за конечное время (за какое не известно). Как оказалось позже, это наилучшее решение общей задачи, невозможно доказать теорему за ограниченное число операций. Простыми словами, алгоритм представляет собой обход (в общем случае бесконечного) графа в ширину, естественно, что предсказуемость работы алгоритма практически равно 0, соответственно для Языка Программирования — это абсолютно не подходит. И в этот момент Кальмэроу нашел блестящее сужение задачи, благодаря которому доказательство некоторых теорем выглядело как процедурное исполнение программы. Стоит отметить, что класс доказуемых теорем достаточно широк и очень хорошо применим для класса программируемых задач. Вот так в 1972 появился Prolog.
      В этой статье я попытаюсь рассказать о Prolog как инструменте решения общих логических задач. Этот топик будет интересен тем, кто уже владеет синтаксисом Prolog и хочет понять его изнутри, а также тем, кто абсолютно не владеет синтаксисом языка, но хочет понять его «изюминку» не тратя лишнее время на изучение синтаксических конструкций.
      Главной чертой Prolog является то, что его можно легко читать, но очень тяжело писать, что принципиально отличается от всех mainstream языков, которые так и говорят писать стало еще легче еще один шаг и можно будет писать на планшете, перетягивая рабочие модули как друзей в Google+, от этого все мы знаем очень сильно страдает само качество кода. Вроде бы каждая строчка понятна, но как система работает за гранью понимания даже для разработчиков, как говорится наиндусили. Мне кажется во всех книгах по обучению Prolog, делают одну и ту же ошибку, начиная рассказ о фактах, отношениях, запросах и у человека складывается отношение к языку как к Экспертной Системе или Базе Данных. Гораздо важнее научится правильно читать программы и почитать так с десяток 🙂

      Как правильно читать программы на прологе

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

      Понятия

      В языке существует 2 понятия предикаты (условия) и объекты (они же переменные и термы). Предикаты выражают некоторое условие, например объект зеленый или число простое, естественно что условия имеют входные параметры. Например green_object(Object), prime_number(Number) . Сколько в предикате параметров, такова и арность предиката. Объектами — являются термы, константы и переменные. Константы — это числа и строки, переменные — выражают неизвестный объект, возможно искомый, и обозначаются как строчки с большой буквы. Оставим пока термы и рассмотрим простейшую программу.

      Программа

      Программа — это набор правил, вида Если условие1 и условие2 и… то верно условие. Формально эти правила объединяются через И, но противоречие получить невозможно, так как в Прологе отсутствует логическое отрицание, а в связке То может присутствовать только один предикат (условие).
      A :- B_1, B_2. % правило читается как : Если B_1 и B_2, то A
      нечетное_простое(Число) :- простое(Число), нечетное(Число).
      % Если «Число» — простое и нечетное, то «Число» — нечетное_простое
      Как видно имя переменной имеет область видимости — это правило. Математически верно, правило звучит: для любой переменной — «Число», если оно простое и нечетное, то оно простое_нечетное. Аналогично, можно перефразировать так: Если существует «Число», что оно нечетное и простое, то оно нечетно_простое. Поэтому имя переменной очень важно! Если в левой части (до :- ) заменить Число на Число2, то правило поменяет смысл: Для любого Число2 и Число, если Число — простое и нечетное, то Число2 — простое нечетное. Получается все числа простые_нечетные! Это самая распространенная ошибка в Прологе.
      A :- B_1, B_2. % правило читается как : Если B_1 и B_2, то A нечетное_простое(Число) :- простое(Число), нечетное(Число). % Если «Число» — простое и нечетное, то «Число» — нечетное_простое

      Пример — совершенные числа

      совершенное_число(Ч) :- число(Ч), сумма_делителей_без_числа(Ч, СуммаДелителей), равно(СуммаДелителей, Ч). совершенное_число(1). равно(Объект, Объект). сумма_делителей_без_числа(1, 1). сумма_делителей_без_числа(Число, Сумма) :- число_предыдущее(Число, Предыдущее), сумма_делителей_числа_до_числа(Число, Сумма, Предыдущее). сумма_делителей_числа_до_числа(Число, 1, 1). сумма_делителей_числа_до_числа(Число, Сумма, Делитель) :- делится_на(Число, Делитель), число_предыдущее(Делитель, Предыдущее), сумма_делителей_числа_до_числа(Число, СуммаПред, Предыдущее), сложить(СуммаПред, Делитель, Сумма). сумма_делителей_числа_до_числа(Число, Сумма, Делитель) :- не_делится_на(Число, Делитель), число_предыдущее(Делитель, Предыдущее), сумма_делителей_числа_до_числа(Число, Сумма, Предыдущее).
      Для начала формально прочитаем, что означают правила:

  1. Если «Ч» — число и для «Ч» и «СуммаДелителей» выполняется условие сумма_делителей_без_числа, проще говоря СуммаДелителей есть сумма делителей числа «Ч», и «Ч» равно «СуммаДелителей», то «Ч» совершенное число.
  2. 1 — совершенное число. Правила могут не иметь условий, в этом случае они называются фактами.
  3. Всякий объект «О» равен «О». В принципе существует, стандартный предикат «=», но можно вполне заменить на свой.
  4. Факт сумма_делителей_без_числа 1 равна 1.
  5. Если сумма делителей «Число» до предыдущего числа «Число» равна «Сумма», то это и есть сумма_делителей_без_числа. Таким образом выражается, сумма делителей X меньше либо равных Y, так как X делится на X, поэтому берем Y = X — 1.
  6. Далее 3 предиката определяют сумму делителей число меньше либо равных Y (Делитель), 1-й случай Y равное 1, 2-й случай Число делится на Y, тогда сумма_делителей(X, Y) = сумма_делителей(X, Y-1) + Y, и 3-й случай Число не делится на Y, тогда сумма_делителей(X, Y) = сумма_делителей(X, Y-1).

Программа — как набор определений

Существует второй способ прочтения данных правил, менее математический и более естественный, основанный на «определениях». Можно заметить, что в Прологе все правила слева (в части то) содержат только одно условие, что по сути является «определением» это условия.
Например, 1-ое правило определение совершенных чисел. «Ч» совершенное число, когда «Ч» число и сумма делителей «Ч» равна «Ч». Одинаковые предикаты группируются по имени объединяясь условием «или». То есть к определению можно добавить: «Ч» совершенное число, когда .., или когда «Ч» — это 1.
Данный способ чтения широко применяется, так как позволяет объединять предикаты в однородные группы и помогает понять, в каком же порядке интерпретатор раскручивает предикаты, для того, чтобы
проверить истинность некоторого утверждения. Например, очевидно, что если предикат не имеет ни одного определения, то доказать истинность утверждения с ним невозможно. В примере № 1 не имеет определения предикат «делится_на».
Интересный факт, что в Прологе нет ни циклов, ни присвоения переменных, ни объявления типов, а если вспомнить еще про термы и отсечение, то язык становится алгоритмически полным.

Термы

Термы имеют рекурсивное определение, как именованная совокупность объектов. Терм = ‘имя'(объект, объект, …), пример person(‘Name’, ‘Surname’), ‘+'(1, 2), person(address(‘Некоторый адрес’), surname(‘Фамилия’), phone(‘Телефон’)) . Если рассматривать терм, как математическое понятие, то терм является функцией, а точнее функтором, то есть ‘+'(1, 2) — означает, что существует такой объект, который равен 1+2. Это абсолютно не означает, что 1+2 = 3, в Прологе — это выражение неистинно, точно так же как и в группе остатков по модулю 2, там 3 вообще не существует. Опять же с математической точки зрения Переменные связываются словом Для Всех, а если в утверждении необходимо слово существует то, для этой цели применяется терм (функтор). Для любого числа существует число-факториал :- factorial(X, fact(X)).
С точки зрения программирования терм можно объяснить гораздо проще: терм — это объект с набором атрибутов, атрибуты могут быть другими термами или константами или переменными (то есть не определены). Главное отличие, все объекты в Prolog immutable, то есть менять атрибуты в них нельзя, зато есть специальное состояние — переменная.

Пример — целочисленная арифметика

нат(0). нат(число(Число)) :- нат(Число). плюс(0, Число, Число). плюс(число(Ч1), Ч2, число(Рез)) :- плюс(Ч1, Ч2, Рез). умножить(0, Число, 0). умножить(число(Ч1), Ч2, Рез2) :- умножить(Ч1, Ч2, Рез), плюс(Рез, Ч2, Рез2).
Очевидно эти утверждения верны для обычной арифметики, но почему тогда мы не включили такие же очевидные как Число + 0 = Число. Ответ простой: избыточность очень плохо для любого определения. Да, это может помогать вычислениям, своеобразная преждевременная оптимизация, но побочными эффектами могут быть противоречия в определениях, неоднозначный вывод утверждения, зацикливание интерпретатора.

Как Prolog понимает предикаты и как доказывает утверждения

Конечно чтение программ, помогает ощутить стиль Пролог, но не делает понятным для чего и как данные определения могут использоваться. Полноценной программой, примеры приведенные выше, назвать нельзя так как не хватает входной точки. Входной точкой в Пролог является запрос, аналог запроса к базе данных SQL или аналог вызова главной функции в функциональном программировании. Примеры запросов: нат(Число) — найти натуральное число, плюс(0, 0, Результат) — найти результат сложения 0 и 0 в переменной Результат, нат(0) — проверить является ли 0 натуральным числом и др.
Конечно, результаты запросов не трудно предсказать из логических соображений, но крайне важно понять, как программа их получила. Все-таки Пролог не черный ящик, а язык программирования, и в отличие от базы данных, где строится SQL-план и запрос может выполняться по-разному на разных Базах данных, Пролог имеет вполне определенный порядок выполнения. Дело в том, что в Базе данных мы вполне знаем какой ответ мы хотим получить исходя из данных в таблице, к сожалению глядя на Пролог программы достаточно сложно сказать, какие утверждения логически выводимы, поэтому понять как работает Пролог интерпретатор гораздо проще.
Рассмотрим на примере запроса плюс(0, 0, Результат) :
1. Находим совпадение (своеобразный pattern-matching, резолюция) данного запроса с левой частью одно из правил. Для данного запроса плюс(0, Число, Число). Соотнесем поочередно все аргументы запроса с правилом и получим: 0 = 0, 0 = Число, Результат = Число. В этих уравнениях участвуют 2 переменные (Число и Результат), решив их мы получаем, что Число = Результат = 0. Так как у данного правила нет условий, мы получили ответ на заданный вопрос. Ответ: да и Результат = 0.
Запрос нат(Число) :
1. Находим 1-е совпадение с правилом, правило нат(0), решая уравнения по соответствию, проще говоря находя резолюцию, мы получаем Число = 0. Ответ: да и Число = 0.
Запрос плюс(Результат, 0, число(0)):
1. Находим резолюцию с правилом плюс(0, Число, Число): Результат = 0, 0 = Число, число(0) = Число, но (!) Число = 0 = число(0) — не возможно так как 0 совпадает число(0). Следовательно ищем резолюцию со следующим правилом.
2. Находим резолюцию с правилом плюс(число(Ч1), Ч2, число(Рез)), получаем число(Ч1) = Результат, Ч2 = 0, число(Рез) = число(0), отсюда Рез = 0. У этого правила, есть условия которые мы должны проверить, учитывая результаты резолюции (значения переменных), плюс(Ч1, Ч2, Рез) -> плюс(Ч1, 0, 0). Запоминаем значение переменных в стеке и формируем новый запрос плюс(Ч1, 0, 0)
3*. Решая запрос плюс(Ч1, 0, 0) находим резолюцию с плюс(0, Число, Число) и получаем Ч1 = 0 и Число = 0.
4. Возвращаемся по стеку к предыдущим переменным Результат = число(Ч1) = число(0). Ответ найден число(0). Соответственно сейчас пролог машина решила уравнение X + 0 = 1.
Грамотное составление правил на языке Пролог, очень сложная штука, но если их составить компактно, то можно получать не только прямые ответы и решения, но и обратные.
Пример запроса плюс(Число, Число, Число): ответ да, Число = 0.
Пример запроса плюс(0, 0, 0): ответ нет, при первой же попытке все резолюции не выполняются.
Пример запроса плюс(Число, Число, число(Число)): ответ да, Число = 1. Решение уравнения X + X = X + 1.
Попробуйте провести вывод для умножить(Число, число(0), число(0)), для этого потребуется 2 раза заносить в стек переменные и вычислять новый запрос. Суть Пролог машины такова, что вы можете отказаться от 1-го результата, тогда Пролог вернется к предыдущему состоянию и продолжит вычисление. Например запрос нат(Число), сначала применит 1-е правило и выдаст 0, а затем применит 2-е правило + 1-е правило и выдаст число(0), можно повторить и получить бесконечную последовательность всех натуральных чисел. Другой пример, запрос плюс(Число, число(0), Число2), будет выдавать последовательность всех пар решения уравнения X + 1 = Y.

Заключение

К сожалению, разумный размер топика, не дал мне подобраться к главной теме, а именно к решению сложных логических задач на языке Пролог, не обладая стратегией их решения. Большие куски кода на Прологе могут отпугнуть не только начинающих, но даже опытных программистов. Цель данной статьи показать, что программы на Прологе могут простым образом читаться на естественном языке, а также исполняться простейшим интерпретатором.
Главная особенность Пролога — это не черный ящик и не библиотека, который решает сложные логические задачи, в Mathematica можно ввести алгебраическое уравнение и она выдаст решение, но последовательность выполняемых шагов — неизвестна. Пролог не может решать общие логические задачи (у него отсутствует логическое «или» и «отрицание»), иначе бы его вывод был недетерминированный как линейной резолюции. Пролог — это золотая середина, между простым интерпретатором и машиной для доказательства теорем, сдвиг в любую сторон приводит к потери одного из свойств.
В следующей статье я бы хотел рассказать, как решаются задачи сортировки, о последовательности переливаний, Miss Manners и другие известные логические задачи. Для тех, кто почувствовал себя неудовлеторенным хочу предложить следующую задачу (решившему первым приз):
Написать предикат, который бы генерировал, бесконечную последовательность натуральных чисел, начиная с 3. Это должны быть стандартные числа в Прологе, операции над которыми выполняются при помощи предиката is: X is 3 + 1 => X=4.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *