そこで、グレー コード ジェネレーターを使用して、長さ 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! !私'。