Этот раздел описывает варианты решения важной задачи - выбора одного значения из нескольких по заданному условию.

Выражение 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>, в другом случае переходим к следующему образцу и т.д. Вы можете использовать символ _ как образец который соответствует любому условию.