所以我使用格雷码生成器生成长度为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! !一世'.