Составители:
Рубрика:
28
вестного. Например, предположим, что переменная Fruit (фрукт) неозначена.
Подцель apples=Fruit вызовет присвоение значения apples переменной
Fruit. Теперь предположим, что подцель Fruit=X непосредственно следует
за предыдущей, и что X свободная переменная. Результат попытки выпол-
нить эту подцель состоит в присваивании переменной X значения apples. Вы
видите, что даже если оба терма Fruit
и X переменные, Турбо-Пролог при-
сваивает (означивает) неозначенной переменной известное значение. Во
многих языках программирования присваивание встречается только в форме
присваивания правого терма левому. Но в Турбо-Прологе присваивание мо-
жет иметь место в обоих направлениях. В качестве последнего примера рас-
смотрим подцель X=oranges.
Переменная X получила значение
apples в результате предыдущей
инициализации. Константа oranges (апельсины) также имеет известное зна-
чение. Так как обо значения известны, то Турбо-Пролог проверяет их ра-
венство. Результирующее выражение apples=oranges ложно. Следователь-
но, эта подцель неуспешна и цель также неуспешна. После этого неуспеш-
ного доказательства цели переменные Fruit и X становятся
неозначенными.
Изучение поведения оператора = при выполнении сравнения и при-
сваивания весьма полезно по двум причинам. Во-первых, оператор = широко
используется при программировании на Турбо-Прологе. Во-вторых, что
более важно, оператор = ведет себя точно так же, как ведут себя внутренние
унификационные подпрограммы при сопоставлении целей и подцелей с
фактами или
правилами программы. Переменным могут быть присвоены
значения во время попыток выполнить цели, и они же могут сравниваться
для проверки равенства. Результаты означивания передаются дальше другим
подцелям, которые используют соответствующие объекты во время при-
сваивания значений или сравнения значений. Если некоторая подцель ока-
зывается неуспешной или последующие подцели не используют значений
означенных
переменных, то эти переменные становятся неозначенными, т.е.
они становятся снова свободными.
Следующая глава дает более подробное описание означивания и осво-
бождения переменных, а сейчас достаточно помнить только, как Турбо-
Пролог вычисляет и присваивает значения.
2.4.3 Откат
Откат - это механизм, который Турбо-Пролог использует для нахож-
дения дополнительных фактов и правил, необходимых при вычислении це-
ли, если текущая попытка вычислить цель оказалась неудачной. Некоторая
аналогия прояснит понятие отката. Предположим, что ваша цель - попасть
домой к другу, но вы не имеете точного представления, как туда добраться.
Однако вы
знаете, что после поворота с автострады на перекрестке необхо-
димо свернуть направо. Друг живет в доме через дорогу от входа в парк.
После того, как вы свернете с автострады и повернете направо на первом пе-
рекрестке, вы не найдете входа в парк. Поэтому вы вернетесь (выполните от-
кат) к перекрестку и
продолжите первоначальное движение до следующего
вестного. Например, предположим, что переменная Fruit (фрукт) неозначена.
Подцель apples=Fruit вызовет присвоение значения apples переменной
Fruit. Теперь предположим, что подцель Fruit=X непосредственно следует
за предыдущей, и что X свободная переменная. Результат попытки выпол-
нить эту подцель состоит в присваивании переменной X значения apples. Вы
видите, что даже если оба терма Fruit и X переменные, Турбо-Пролог при-
сваивает (означивает) неозначенной переменной известное значение. Во
многих языках программирования присваивание встречается только в форме
присваивания правого терма левому. Но в Турбо-Прологе присваивание мо-
жет иметь место в обоих направлениях. В качестве последнего примера рас-
смотрим подцель X=oranges.
Переменная X получила значение apples в результате предыдущей
инициализации. Константа oranges (апельсины) также имеет известное зна-
чение. Так как обо значения известны, то Турбо-Пролог проверяет их ра-
венство. Результирующее выражение apples=oranges ложно. Следователь-
но, эта подцель неуспешна и цель также неуспешна. После этого неуспеш-
ного доказательства цели переменные Fruit и X становятся неозначенными.
Изучение поведения оператора = при выполнении сравнения и при-
сваивания весьма полезно по двум причинам. Во-первых, оператор = широко
используется при программировании на Турбо-Прологе. Во-вторых, что
более важно, оператор = ведет себя точно так же, как ведут себя внутренние
унификационные подпрограммы при сопоставлении целей и подцелей с
фактами или правилами программы. Переменным могут быть присвоены
значения во время попыток выполнить цели, и они же могут сравниваться
для проверки равенства. Результаты означивания передаются дальше другим
подцелям, которые используют соответствующие объекты во время при-
сваивания значений или сравнения значений. Если некоторая подцель ока-
зывается неуспешной или последующие подцели не используют значений
означенных переменных, то эти переменные становятся неозначенными, т.е.
они становятся снова свободными.
Следующая глава дает более подробное описание означивания и осво-
бождения переменных, а сейчас достаточно помнить только, как Турбо-
Пролог вычисляет и присваивает значения.
2.4.3 Откат
Откат - это механизм, который Турбо-Пролог использует для нахож-
дения дополнительных фактов и правил, необходимых при вычислении це-
ли, если текущая попытка вычислить цель оказалась неудачной. Некоторая
аналогия прояснит понятие отката. Предположим, что ваша цель - попасть
домой к другу, но вы не имеете точного представления, как туда добраться.
Однако вы знаете, что после поворота с автострады на перекрестке необхо-
димо свернуть направо. Друг живет в доме через дорогу от входа в парк.
После того, как вы свернете с автострады и повернете направо на первом пе-
рекрестке, вы не найдете входа в парк. Поэтому вы вернетесь (выполните от-
кат) к перекрестку и продолжите первоначальное движение до следующего
28
Страницы
- « первая
- ‹ предыдущая
- …
- 26
- 27
- 28
- 29
- 30
- …
- следующая ›
- последняя »
