Haskell案例中的范围检查?

时间:2010-03-11 08:55:06

标签: haskell case

是否有一种在Haskell中执行以下操作的有效方法:

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

除了有97行“doDefault”之外?

3 个答案:

答案 0 :(得分:15)

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

答案 1 :(得分:9)

使用警卫! ;)

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


  | n `elem` [3..99] =  doDefault

答案 2 :(得分:1)

我认为您可以将默认情况设为_模式,它与任何内容匹配。

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

我不确定这是否正是你正在寻找的,因为它没有检查那里范围的上限......你可能想要使用警卫。