Haskell:从一串位中获取一位

con*_*ode 3 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
Run Code Online (Sandbox Code Playgroud)

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

cost' :: String -> Cost
cost' r i = toInteger( ord ( r!!i ) )
Run Code Online (Sandbox Code Playgroud)

现在,出于某种原因,这是行不通的.无论我使用什么'i'值,函数cost'将导致48(如果列表中位置2的位为0 - > ex.'100000')或49(如果位置2中的位)列表是1 - >例如'101000').

这对我来说没有任何意义.这是我的理解,Strings在Haskell中存储为列表,并且为了从Haskell中的列表'r'获得某个元素'i',你执行'r! !一世'.

Dan*_*her 5

那是因为ord返回字符的代码点号,并且'0'是代码点48,'1'是代码点49.你想要使用的函数是digitToInt.