Охра́на (охраня́ющее выраже́ние, охранное выражение) — логическое выражение, которое предназначено для ограничения вычислительных процессов и выбора варианта вычислений. Обычно, используется в функциональных языках программирования (например, Haskell, Erlang)[1].
Все последующие охраняющие выражения приведены на функциональном языке Haskell, в котором эта технология используется очень часто. Все такие выражения выделены в кодах полужирным начертанием.
Функция divisors
возвращает список делителей заданного числа n
. Во второй строке определения показана охрана, которая ограничивает выбор элемента списка делителей x
только таким значением, которое делит исходный параметр n
без остатка.
divisors n = [x | x <- [1..(n - 1)], n `mod` x == 0]
Функция sign
возвращает знак заданного числа x
. Охраняющие выражения записаны после символов (|
). Они позволяют выбрать ту или иную альтернативу при вычислении знака числа. Такой способ охранения часто используется вместо механизма сопоставления с образцом, когда в функции нет возможности явно описать образец (например, в случае, если функция является обобщённой прикладной функцией для обработки значений некоторого типа, являющегося экземпляром какого-либо класса).
sign x | x < 0 = -1 | x == 0 = 0 | x > 0 = 1
Оформление в виде охраны позволяет в случае недопустимого выражения для сопоставления перейти к следующему. В случае, если предыдущий пример будет оформлен как оператор сопоставления с образцом, то при x = 0
первое сопоставление (x < 0
) вызовет ошибку, обработчик которой прекратит дальнейшие попытки на сопоставление. Кроме того, для случая неистинности всех выражений, удобно отлавливать такие ситуации установкой непосредственного значения истинности True
. Для удобочитаемости, в стандартной библиотеке Prelude имеется константа otherwise, что внешне ещё более напоминает переключатель в алгоритмических языках.
Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".
Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.
Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .