¿Verificación de rango en el caso de Haskell?
Pregunta
¿Existe una forma válida de hacer lo siguiente en Haskell:
case n of
0 -> doThis
1 -> doThat
2 -> doAnother
3..99 -> doDefault
¿Aparte de tener 97 líneas de "Dodefault"?
Solución
case n of
0 -> doThis
1 -> doThat
2 -> doAnother
_ -> doDefault
Si realmente necesitas un rango,
case n of
0 -> doThis
1 -> doThat
2 -> doAnother
x | 3 <= x && x < 100 -> doDefault
_ -> reallyDoDefault
Otros consejos
¡Usando guardias! ;)
Foo n
| n == 0 = doThis
| n == 1 = doThat
| n == 2 = doAnother
| (n >= 3 ) && (n <= 99) = doDefault
O
| n `elem` [3..99] = doDefault
Creo que puede tener el caso predeterminado del patrón _, que coincide con cualquier cosa.
case n of
0 -> doThis
1 -> doThat
2 -> doAnother
_ -> doDefault
No estoy seguro de si eso es lo que estás buscando, ya que no verifica el límite superior en el rango allí ... es posible que desee usar guardias.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow