Haskell/ControlStructures
Этот раздел описывает варианты решения важной задачи - выбора одного значения из нескольких по заданному условию.
Выражение if
[править]Вам уже, наверное, знаком это оператор. Полный синтаксис выглядит так:
if <условие> then <значение1> else <значение2>
Если <условие> = True то возвращается <значение1> в противном случае - <значение2>. Обратите внимание в Haskell if это выражение, которое возвращает значение, а не оператор (statement), который выполняется. Это характерное различие между функциональными и императивными языками. if выражения необязательно записывть лишь в одну строчку. Если вам удобно расписать if на несколько строк делайте это подобным образом:
if <условие>
then <1>
else <0>
if <условие>
then
<значение1>
else
<значение2>
А вот простенький пример:
message42 :: Integer -> String
message42 n =
if n == 42
then "The Answer is forty two."
else "The Answer is not forty two."
В отличие от многих других языков, в Haskell кляуза else обязательна. Вспомним - if это выражение, которое возвращает результат, и else гарантирует, что результат будет в любом случае.
Выражение case
[править]Выражение case можно считать обобщенной формой if. В качестве примера давайте выразим if через case:
case <условие> of
True -> <значение1>
False -> <значение2>
_ -> error "Neither True nor False? How can that be?"
Сначала проверяется равно ли значение <условие> первому образцу - от есть True. Если значения равны выполняется выражение <значение1>, в другом случае переходим к следующему образцу и т.д. Вы можете использовать символ _ как образец который соответствует любому условию.