3

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

4

1 に答える 1

5

これordは、文字のコード ポイント番号を返すためで、'0'コード ポイント 48、'1'コード ポイント 49 です。使用する関数はdigitToInt.

于 2012-10-08T20:42:14.590 に答える