aquí tengo una función de haskell corta que se supone que convierte "ABCDEF" en 0x41,0x42,0x43,0x44,0x45,0x46 (sus valores de ascii), luego multiplíquelos para que se convierta en 0x4142,4344,4546 pero parece estar limitando la longitud de los enteros. ¿Creí que Haskell usó bignums arbitrarios?La función de Haskell parece limitar la longitud de los enteros, ¿pensé que utilizaba bignums?
La última línea del código funciona bien, lo que me
Cualquier idea rompecabezas? Muchas gracias
import Data.Char
import Numeric
strToHex2 (h:[]) = ord h
strToHex2 (h:t) = (ord h) + ((strToHex2 t) * 256)
strToHex s = strToHex2 (reverse s)
main = do
print(strToHex "ABCDEF")
print ((((((((0x41*256+0x42)*256)+0x43)*256)+0x44)*256)+0x45)*256+0x46)
La salida es:
1128547654 <- limited to 32 bits for some reason?
71752852194630 <- that's fine
Vea también http://stackoverflow.com/questions/3429291/haskell-int-and-integer –
Los tipos son sus amigos. Agregue firmas de tipo, y está claro lo que está pasando! –