gray-extended-1.5.8: Gray encoding schemes

Copyright(c) Amy de Buitléir 2011-2019
Safe HaskellSafe



Gray encoding schemes. A Gray code is a list of values such that two successive values differ in only one digit. Usually the term /Gray code/ refers to the Binary Reflected Gray code (BRGC), but non-binary Gray codes have also been discovered. Some Gray codes are also cyclic: the last and first values differ in only one digit.



grayCodes :: Int -> [[Bool]] Source #

grayCodes k generates the list of Binary Reflected Gray Code (BRGC) numbers of length k. This code is cyclic.

integralToGray :: Bits a => a -> a Source #

integralToGray n encodes n using a BRGC, and returns the resulting bits as an integer. For example, encoding 17 in BRGC results in 11001, or 25. So integralToGray 17 returns 25.

grayToIntegral :: (Num a, Bits a) => a -> a Source #

grayToIntegral n decodes n using a BRGC, and returns the resulting integer. For example, 25 is 11001, which is the code for 17. So grayToIntegral 25 returns 17.

naryGrayCodes :: [a] -> Int -> [[a]] Source #

naryGrayCodes xs k generates a non-Boolean (or n-ary) Gray code of length k using the elements of xs as "digits". This code is cyclic.

Ex: naryGrayCodes "012" 4 generates a ternary Gray code that is four digits long.