Язык программирования Prolog

Язык программирования Prolog (PROgramming in LOGic) является декларативным языком программирования, в основе которого лежит многократное выполнение операции резолюции. Программа на этом языке состоит из набора исходных высказываний, на основе которых выводятся дедуктивные умозаключения. Компоненты высказываний называются утверждениями. Утверждение состоит из имени, за которым в скобках помещается список его аргументов. Утверждение является каким-либо высказыванием о его аргументах, и для него обычно выбирается имя, отражающее лежащую в его основе семантику. Например, для того чтобы записать утверждение о том, что Bill является родителем Магу, можно использовать утверждение parent (bill, тагу)

Обратите внимание на то, что аргументы утверждения начинаются со строчной буквы, несмотря на то что они являются именами собственными. Все дело в том, что в языке Prolog внешне константы и переменные различаются тем, что имена констант начинаются со строчной буквы, а переменных — с прописной. Высказывания в Prolog являются либо фактами, либо правилами, и каждое из них заканчивается точкой. Факт состоит из одного утверждения. Например, тот факт, что черепаха передвигается быстрее улитки, можно записать с помощью высказывания faster (turtle, snail)

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

faster (rabbit, turtle)

Правило в языке Prolog представляет собой высказывание с импликацией. Однако вместо высказывания X —» Y программист запишет «У если X», используя вместо слова «если» символ «:-» (двоеточие и тире). Например, правило «X пожилой, значит X мудрый» логик запишет как

old (X) -> wise (X)

а программист вместо этого напишет

wise (X):- old (X)

Вот еще пример. Правило

(faster (X. Y) AND faster (Y. Z)) -» faster (X. Z) в Prolog будет выглядеть как

faster (X. Z):- faster (X. Y). faster (Y. Z)

Запятая, разделяющая faster (X, Y) и faster (Y. Z), обозначает операцию AND. Хотя подобные правила и не являются выражениями, они разрешены в Prolog, поскольку преобразовать их в дизъюнктивную форму не составляет особого труда.

Не забывайте, что Prolog не знает значения утверждений программы, он просто манипулирует высказываниями согласно заданным правилам. Поэтому программист должен описать все релевантные характеристики утверждения с помощью фактов и правил. Обычно факты используются для обозначения частных случаев утверждения, а правила — для описания общих принципов. Этот же подход использовался в приведенных ранее высказываниях с предикатом faster. Два факта описывают отдельные случаи скорости, а правило описывает общее свойство. Обратите внимание на то, что хотя утверждение, что кролик перемещается быстрее, чем улитка, и выражено эксплицитно, оно является следствием двух фактов, объединенных с правилом.

Используя для создания программного обеспечения язык Prolog, программист должен разработать набор фактов и правил, описывающих известную информацию. Эти факты и правила представляют собой исходные высказывания дедуктивной системы. После того как эти высказывания написаны, системе можно предлагать гипотезы (или целевые утверждения (goal) в терминологии языка Prolog), они обычно вводятся с клавиатуры. Система применяет операцию резолюции, чтобы доказать, что целевое утверждение является следствием исходных высказываний. Например, основываясь на высказываниях, описывающих отношение faster, можно доказать истинность таких целевых утверждений

faster (turtle, snail) faster (rabbit, turtle) faster (rabbit, snail)

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

Больший интерес представляют целевые утверждения, аргументы которых являются переменными, а не константами. В таком случае система пытается вывести целевое утверждение из исходных высказываний, запоминая операции унификации, которые для этого необходимо выполнить. Затем, когда целевое утверждение получено, система выводит на экран все унификации. Например, на целевое утверждение faster (W. snail) система ответит faster (turtle, snail)

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

faster (rabbit, snail)

Мы также можем с помощью целевого утверждения найти всех животных, которые передвигаются медленнее, чем кролик

faster (rabbit. W)

Если же мы начнем с целевого утверждения

faster (V. W)

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




double arrow
Сейчас читают про: