[Pr2Ej3] encodeWord / decodeWord

[Pr2Ej3] encodeWord / decodeWord

de Marco Nicolas Rodriguez Alvariza -
Número de respuestas: 5

Hola.

No entiendo el rol de las funciones encodeWord y decodeWord. Tampoco entiendo los tipos. Por ejemplo, si encodeWord recibe un caracter y su posición módulo 3, el tipo no debería ser

encodeWord ::  Char -> Int -> Word8 ?

Saludos

En respuesta a Marco Nicolas Rodriguez Alvariza

Re: [Pr2Ej3] encodeWord / decodeWord

de Marcos Viera - InCo -

El caracter viene como un Word8. La idea es tener un par de funciones, cualesquiera, que realicen la codificación y decodificación de un caracter, pudiendo además usar la información de cuál es su posición módulo 3 en el string.

Por ejemplo, la función encodeWord más simple posible sería la que no hace nada y deja el caracter como está:

encodeWord c _ = c

Otra un poco más compleja:

encodeWord c p = mod (c + p) maxBound 

En respuesta a Marcos Viera - InCo

Re: [Pr2Ej3] encodeWord / decodeWord

de Marco Nicolas Rodriguez Alvariza -

Bien. Ahora entiendo el rol de encodeWord y decodeWord.

La duda que me queda es "El caracter viene como un Word8". No logro obtener el contenido del archivo como una lista de [Word8].

En principio, para la función encode pensé algo así

encode inputFile outputFile = do

    fileString <- readFile inputFile

    ...

    writeFile outputFile $ encodeString fileString

El problema que veo es que fileString es de tipo String o ByteString (según si uso readFile de Prelude o de ByteString), pero no es un [Word8]. No encontré ninguna función que lea un archivo y lo retorne como una lista de Word8 (busqué en Hoogle el tipo FilePath -> [Word8], sin resultados). La única solución que se me ocurre es leer el archivo como String usando readFile y convertir cada Char en Word8, pero para la conversión hay que usar unsafeCoerce.

Tal vez el ejercicio va por otro lado...

En respuesta a Marco Nicolas Rodriguez Alvariza

Re: [Pr2Ej3] encodeWord / decodeWord

de Marcos Viera - InCo -

Podés definir una función de conversión:


wordToChar :: Word8 -> Char

wordToChar = toEnum . fromEnum 



En respuesta a Marcos Viera - InCo

Re: [Pr2Ej3] encodeWord / decodeWord

de Marcos Viera - InCo -

Perdón, lo que querías era:

charToWord :: Char -> Word8 

charToWord = toEnum . fromEnum