Haskell:从一串位中获取一位

时间:2012-10-08 20:39:48

标签: haskell

所以我使用格雷码生成器生成长度为6的所有可能的位串。生成器如下:

gray :: Integer -> String
gray n
 | n == 0 = [""]
 | n >  0 = map (++"0") (gray (n-1)) ++
            map (++"1") (reverse (gray (n-1)))

recipes = gray 6

然后,我试图从每个字符串中获取一个特定的位并将该位转换为整数。我是按照以下方式做到的:

cost' :: String -> Cost
cost' r i = toInteger( ord ( r!!i ) )

现在,由于某种原因,这不起作用。无论我使用什么'i'值,函数成本'将导致48(如果列表中位置2的位为0 - > ex。'100000')或49(如果位置2中的位)该列表的列表是1 - > ex。'101000')。

对我来说这没有任何意义。这是我的理解,字符串在Haskell中存储为列表,并且为了从Haskell中的列表'r'获取某个元素'i',您执行'R !! I'。

1 个答案:

答案 0 :(得分:5)

那是因为ord返回字符的代码点编号,而'0'是代码点48,'1'是代码点49.您要使用的函数是{{3 }}