Supongamos que tengo una lista de números del 1 al MAGIC_NUMBER - ¿Hay alguna manera de declarar esto de antemano?¿Cómo uso constantes en haskell para evitar números mágicos?
Respuesta
Puede utilizar los datos algebraicos en todos sus cálculos y el uso de algunos valores con nombre si son realmente "mágica", o construir render de los valores algebraicos a los números "mágicos" y muchos más:
class FlagsMask f where mask :: f -> Int
data Magics = Alpha | Beta | Gamma
deriving (Enum, Read, Show, Eq, Ord)
instance FlagsMask Magics where
mask m = 2^fromEnum m
data PermsFlag = FlagRead | FlagWrite | FlagExec | FlagSuper
-- [flagRead, flagWrite, flagExec] = [2^n | n <- [0..2]]
(flagRead : flagWrite : flagExec : _) = [2^n | n <- [0..]]
flagSuper = 16
instance FlagsMask PermsFlag where
mask FlagRead = flagRead
mask FlagWrite = flagWrite
mask FlagExec = flagExec
mask FlagSuper = flagSuper
*Main> map fromEnum [Alpha .. ] [0,1,2] it :: [Int] *Main> zip [Alpha .. ] [1..] [(Alpha,1),(Beta,2),(Gamma,3)] it :: [(Magics, Integer)]
Claro. De hecho, dado que Haskell es puramente funcional, es mucho más fácil definir una constante que una no constante.
magicNumber = 42
magicList = [1..magicNumber]
Las respuestas de Chuck y ony son correctas. Hay una trampa en la que debe tener en cuenta:
magicNum = 42
f magicNum = 'A'
f _ = 'B'
no es lo que se podría esperar - magicNum
en segunda línea es un patrón que coincida con todo, al igual que f x = 'A'
. Use f x | x == magicNum = 'A'
.
De hecho, incluso puede volver a enlazar operadores estándar de esta manera. Por ejemplo, si define la función 'f (==) a b = a == b', y luego llama a' f div 8 4', el resultado será 2, no falso. (Esto es, por supuesto, una especie de cosa patológica que hacer). – Chuck
- 1. Práctica recomendada para constantes globales que implican números mágicos
- 2. Números mágicos contra constantes con nombre
- 3. Evitar el uso de números mágicos en JavaScript: alternativas que funcionan con JsHint
- 4. PHP - ¿Quieres decir evitar los métodos mágicos?
- 5. Deshacerse de los números "mágicos" en SQL Server
- 6. ¿Qué son los "números mágicos" en la programación de computadoras?
- 7. SQL: evitando la codificación rígida o números mágicos
- 8. Haciendo Números eficientes en Haskell
- 9. Números pseudoaleatorios constantes en las plataformas
- 10. números mágicos de la convocatoria reiniciar el sistema Linux()
- 11. Números Haskell Peano
- 12. Haskell y números aleatorios
- 13. Comprobación de rieles: accesorios, fábricas y números mágicos
- 14. ¿Los códigos de estado HTTP son considerados "números mágicos"?
- 15. Uso de comandos mágicos fuera de Interactive Shell en IPython
- 16. Uso excesivo deIntegral en Haskell
- 17. Representar secuencia de números tetraédricos en Haskell
- 18. ¿Cómo puedo factorizar esta expresión Haskell para evitar cálculos repetidos?
- 19. javascript - cómo evitar Ajustar a números decimales
- 20. Lectura eficiente de números en Haskell
- 21. Constantes en MATLAB
- 22. ¿Cómo uso números aleatorios en C#?
- 23. patrón de juego Haskell - cómo utilizar constantes variables
- 24. ¿Cómo evitar el desbordamiento de pila en Haskell?
- 25. Uso de SSL en Haskell
- 26. ¿Cómo uso la función de filtro en Haskell?
- 27. Uso correcto de ReadP en Haskell
- 28. Uso de Cabal (Haskell)
- 29. ¿Existe alguna forma práctica de usar números naturales en Haskell?
- 30. ¿Cómo uso una función de biblioteca Haskell?
¿Qué quiere decir con "declarar números"? – ony
Un punto muy importante que debes aclarar: ¿cuándo conoces el número mágico? Si lo sabe en tiempo de compilación, entonces Chuck tiene la respuesta correcta a continuación. –