Красное и зеленое отсечение в Prolog

      Комментарии к записи Красное и зеленое отсечение в Prolog отключены

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

  • Автор
    Сообщения
  • #2472

    questioner
    Участник

    Я разобрался с тем, как работает отсечение на примерах статьи про семантику Prolog-программ. Однако, там ничего не говорится про цвета отсечения — различают красное и зеленое. Мне нужно на примерах пояснить разницу между ними.

  • #2473

    Здравствуйте. Разделение на красное и зеленое отсечение является чисто условным — интерпретатор Prolog никак их не различает. Однако, программисты условились называть зелеными отсечениями те, что не влияют на результаты работы программы, а красными — все остальные. Там, например, отсечение в реализации предиката max3 из статьи про семантику — красное, т.к. его удаление повлияет на результаты. Однако в другой реализации оно будет зеленым, т.к. оказывает влияние только на эффективность (устраняет лишние проверки условий при интерпретации):

    max3(A, B, C, Max):-
      A >= B, A >= C, !, Max = A;
      B >= A, B >= C, !, Max = B;
      C >= A, C >= B, Max = C.

    Может показаться, что зеленые отсечения возможны лишь в случае наличия в программах лишних проверок, однако это не так — они часто встречаются при обработке списков. Например посмотрите на предикат split — все отсечения в нем являются зелеными. Так при удалении отсечения из первого правила ничего не изменится, ведь оно сработает только если список не содержит ни одного элемента, но второе правило начнет выполняться только для списков из одного элемента, а третье — для списков из более чем двух элементов.

Для ответа в этой теме необходимо авторизоваться.