7

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

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

除了有 97 行“doDefault”之外?

4

3 回答 3

19
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
于 2010-03-11T08:57:01.377 回答
11

使用警卫!;)

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


或者

  | n `elem` [3..99] =  doDefault
于 2010-03-11T09:16:15.630 回答
2

我认为您可以将默认大小写为 _ 模式,它可以匹配任何内容。

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

我不确定这是否正是您要寻找的,因为它不会检查那里范围的上限……您可能想改用警卫。

于 2010-03-11T09:00:24.500 回答