所以我使用格雷码生成器来生成所有可能的长度为 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' 值,函数 cost' 将导致 48(如果列表的位置 2 中的位为 0 -> 例如 '100000')或 49(如果位置 2 中的位列表是 1 --> ex. '101000')。
为什么会这样对我来说没有任何意义。我的理解是字符串在 Haskell 中存储为列表,并且要从 Haskell 中的列表 'r' 中获取某个元素 'i',执行 'r! !一世'。