Проверка диапазона в случае Haskell?

Есть ли допустимый способ сделать следующее в Haskell:

case n of
    0     -> doThis
    1     -> doThat
    2     -> doAnother
    3..99 -> doDefault

кроме иметь 97 строк "doDefault"?

6
задан me2 11 March 2010 в 08:55
поделиться

3 ответа

case n of
    0     -> doThis
    1     -> doThat
    2     -> doAnother
    _     -> doDefault

Если вам действительно нужен диапазон,

case n of
    0     -> doThis
    1     -> doThat
    2     -> doAnother
    x | 3 <= x && x < 100 -> doDefault
    _     -> reallyDoDefault
17
ответ дан 8 December 2019 в 03:52
поделиться

Я думаю, что вы можете использовать по умолчанию шаблон _, который подходит ко всему.

case n of
  0 -> doThis
  1 -> doThat
  2 -> doAnother
  _ -> doDefault

Я не уверен, что это именно то, что вы ищете, поскольку он не проверяет верхнюю границу диапазона... возможно, вместо этого вы захотите использовать гварды.

1
ответ дан 8 December 2019 в 03:52
поделиться

Использование гвардии! ;)

Foo n 
  | n == 0 = doThis
  | n == 1 = doThat
  | n == 2 = doAnother
  | (n >= 3 ) && (n <= 99) = doDefault 


ИЛИ

  | n `elem` [3..99] =  doDefault
9
ответ дан 8 December 2019 в 03:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: