所以我使用格雷码生成器生成长度为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'。
答案 0 :(得分:5)
那是因为ord
返回字符的代码点编号,而'0'
是代码点48,'1'
是代码点49.您要使用的函数是{{3 }}