2012-10-08 28 views
3

所以我使用格雷碼發生器以生成長度爲6的所有可能的位串的發生器是如下的字符串:Haskell中:獲得單個比特從比特

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)) 

現在,由於某種原因,這是行不通的。無論我使用什麼樣的'我'值,函數成本'將導致48(如果位置2中的位是0 - >例如'100000')或49(如果位於位置2的位該列表是1 - >例如'101000')。

它對我來說沒有任何意義,爲什麼這是..我的理解是,字符串在Haskell中存儲爲列表,並且要從Haskell中的列表'r'中獲得某個元素'i'執行'r !! i'。

回答

5

這是因爲ord返回字符的代碼點數量,並'0'是代碼點48,'1'是代碼點49.你想使用的功能是digitToInt