/* GoogleAds */

Главная

ПРОЕКТ "ЧЕЛОВЕК. ЗЕМЛЯ. ВСЕЛЕННАЯ"

Инструменты пользователя

Инструменты сайта


project:prolog:operator_prisvaivanija_i_sravnenija



Оператор присваивания и сравнения =

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

Это выражение может быть подцелью, сгенерированной внутри Пролога. Так как оба значения известны, то оператор = является оператором сравнения. В этом случае равенство истинно, и подцель является успешной.

Рассмотрим выражение apples = oranges.

Так как эти два терма имеют различные значения, то равенство ложно.

Рассмотрим пример, в котором используется переменная: X = apples.

Это выражение так же могло бы быть подцелью, сгенерированной внутри Пролога во время попытки вычислить цель. Но здесь знак равенства не обязательно является оператором присваивания. Эта подцель присваивает значение apples переменной X (означивает эту переменную) только в том случае, если X еще не была означена. Но если X уже имеет значение, то оно известно внутренним подпрограммам унификации и сравнивается с константой apples. Если эти два значения одинаковы, то подцель успешна; если они различны, то подцель неуспешна.

Интерпретация Прологом оператора = зависит от того, известны ли оба значения или нет. Если оба значения известны, то оператор интерпретируется как оператор сравнения, даже если оба терма переменные.

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

Для Пролога несущественно, известно ли значение справа или слева от = ; в любом случае неизвестное получит значение известного.

Допустим, что переменная Fruit (фрукт) неозначена. Подцель apples=Fruit вызовет присвоение значения apples переменной Fruit. Теперь предположим, что подцель Fruit=X непосредственно следует за предыдущей, и что X свободная переменная. В результате попытки выполнить эту подцель переменной X будет присвоено значение apples.

Даже если оба терма Fruit и X переменные, Пролог присваивает (означивает) неозначенной переменной известное значение. Во многих языках программирования присваивание встречается только в форме присваивания правого терма левому. Но в Прологе присваивание может иметь место в обоих направлениях.

В качестве последнего примера рассмотрим подцель X=oranges. Переменная X получила значение apples в результате предыдущей инициализации. Константа oranges (апельсины) также имеет известное значение. Так как оба значения известны, то Пролог проверяет их равенство. Результирующее выражение apples=oranges ложно. Следовательно, эта подцель неуспешна и цель также неуспешна.

После этого неуспешного доказательства цели переменные Fruit и X становятся неозначенными.

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

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

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

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

!!Рекомендуем: Семейная Энциклопедия ЗдоровьяЧто должен знать современный человек?Самоанализ. Работа над собойОглавлениеГлавная сайта

project/prolog/operator_prisvaivanija_i_sravnenija.txt · Последние изменения: 2023/09/03 22:22 (внешнее изменение)

Вы можете оставить свои комментарии в разделе "Обсуждение".
Рекомендуем оформить подписку на новости данного раздела. Для этого нажмите на кнопку "Подписаться", расположенную справа снизу каждой страницы (знак конверта).




Индекс цитирования