Haskell案例中的范围检查?

me2*_*me2 6 haskell case

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

case n of
    0     -> doThis
    1     -> doThat
    2     -> doAnother
    3..99 -> doDefault
Run Code Online (Sandbox Code Playgroud)

除了拥有97行"doDefault"之外?

ken*_*ytm 17

case n of
    0     -> doThis
    1     -> doThat
    2     -> doAnother
    _     -> doDefault
Run Code Online (Sandbox Code Playgroud)

如果你真的需要一个范围,

case n of
    0     -> doThis
    1     -> doThat
    2     -> doAnother
    x | 3 <= x && x < 100 -> doDefault
    _     -> reallyDoDefault
Run Code Online (Sandbox Code Playgroud)

  • 它的一般形式在Data.Ix中:_ |的情况n inRange(3,100)n - > ... (7认同)

Pra*_*are 9

使用警卫!;)

Foo n 
  | n == 0 = doThis
  | n == 1 = doThat
  | n == 2 = doAnother
  | (n >= 3 ) && (n <= 99) = doDefault 
Run Code Online (Sandbox Code Playgroud)


要么

  | n `elem` [3..99] =  doDefault
Run Code Online (Sandbox Code Playgroud)

  • 基于`elem`的版本是不是明显变慢了?或者这是优化了吗? (3认同)