Шаг 18.
Основы логического программирования.
Сопоставление

    На этом шаге мы рассмотрим сопоставление.

    В предыдущих шагах вы познакомились с тем, как Пролог "сопоставляет вопросы и ответы", "ищет сопоставление", "сопоставляет условия с фактами", "сопоставляет переменные с константами" и т. д. Ниже рассмотрим, что же понимается под термином сопоставление (matching).

    В Прологе имеется несколько примеров сопоставления одной вещи с другой. Ясно, что идентичные структуры сопоставимы (сравнимы) друг с другом: parent (joe,tammy) сопоставимо с parent (joe,tammy). Однако сопоставление (сравнение) обычно использует одну или несколько свободных переменных. Например, если X свободна, то parent (joe, X) сопоставимо с parent (joe,tammy) и X принимает значение (связывается с) tammy.

    Если же X уже связана, то она действует так же, как обычная константа. Таким образом, если X связана со значением tammy, то parent (joe,X) сопоставимо с parent (joe,tammy), но parent (joe,X) не сопоставимо с parent (joe,millie).

    В предыдущем примере сопоставление не выполняется, т. к. если переменная становится связанной, то ее значение не может изменяться.

    Как может переменная оказаться связанной при попытке Пролога сопоставить ее с чем-либо? Вспомним, что переменные не могут хранить значения, т. к. они становятся связанными только на промежуток времени, необходимый для отыскания (или попытки отыскания) одного решения цели. Поэтому имеется только одна возможность для переменной оказаться связанной - перед попыткой сопоставления, если цель требует больше одного шага, и переменная стала связанной на предыдущем шаге. Например: parent (joe,X), parent (X, jenny) является корректной целью. Она означает: "Найти кого-либо, являющегося ребенком Joe и родителем Jenny". Здесь при достижении подцели parent(X, jenny) переменная X уже будет связана. Если для подцели parent (X, jenny) нет решений, Пролог "развяжет" переменную X и вернется назад, пытаясь найти новое решение для parent (joe,X), а затем проверит, будет ли "работать" parent (X, jenny) с новым значением X.

    Две свободные переменные могут сопоставляться друг с другом. Например, parent (joe,X)сопоставляется с parent (joe,Y), связывая при этом переменные X и Y между собой. С момента "связывания" X и Y трактуруются одна переменная и любое изменение значения одной из них приводит к немедленному соответствующему изменению другой. И случае подобного "связывания" между собой нескольких свободных переменных все они называются совмещенными переменными. Некоторые методы программирования специально используют "взаимосвязывание" свободных переменных, являющихся, на самом деле, различными.

    В Прологе связывание переменных (со значениями) производится двумя способами: на входе и выходе. Направление, в котором передаются значения, указывается в шаблоне потока параметров (flow pattern). В дальнейшем (для краткости) будем опускать слово "шаблон" и говорить просто "поток параметров". Когда переменная передается в предложение, она считается входным аргументом и обозначается символом (i). Когда же переменная возвращается из предложения, она является выходным аргументом и обозначается символом (о).

    На следующем шаге мы рассмотрим раздел предложений.




Предыдущий шаг Содержание Следующий шаг