0votos

Booleanos y numeración en Haskell

por josejuan hace 6 años

Se puede establecer una biyección entre la lista de bits solicitada y el ordinal de cada bit. Para ello, basta ver que hay "n * 2^n" bits (de 0 a n*2^n-1) y que cada uno de los 2^n números contiene n bits. Así, dado el ordinal 'x', su bit estará a cero, si es cero el valor (x/n)&(1<<(n-x%n-1)). Si se quieren empaquetar, pues sólo es tomar de n en n la secuencia indicada.

Generar una sucesión de arrays de booleanos, cada uno correspondiente a la representación en binario de la posición de dicho array.

1
2
3
4
5
6
7
8
import Data.Bits 
import Data.List.Split 
 
-- Enumeración de bits: false, false, false, false, false, true, false, true, false, ... 
pbits n = map (\x -> 0 /= div x n .&. shift 1 (n - mod x n - 1)) [0..n*2^n-1] 
 
-- Empaqueta los bits: [false, false, false], [false, false, true], [false, true, false], ... 
abits n = splitEvery n $ pbits n 

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.