Bit
のリストを取得し、ランダムなリストを使用して元のリストを変更するかどうかを決定したいと思います。(そうでない場合は、明確にしてください。)
channel :: Int -> Float -> [Bit] -> [Bit]
channel seed noise xs = zipWith (alterBit noise) (randomFloatList seed) xs
一部の角かっこは必要ないことに注意してください。関数適用では、グループ化のためだけに角かっこは必要ありません。
alterBit :: Float -> Float -> Bit -> Bit
alterBit noise random bit | random <= noise = alter bit
| otherwise = bit
繰り返しになりますが、これを使用しているリストへの参照をすべて削除しました。これにより、フロートとビットのリストから必要な単一zipWith
の要素がこの関数に送信されます。
私は自由に定義しました
data Bit = O | I deriving Show
そして、1つの変更関数しか考えられませんでした:
alter :: Bit -> Bit
alter O = I
alter I = O
それをテストしてみましょう:
> take 6 $ randomFloatList 3
[0.10321328,0.98988104,0.46191382,0.8553592,0.7980472,0.35561606]
> map (<= 0.5) $ take 6 $ randomFloatList 3
[True,False,True,False,False,True]
> channel 3 0.5 [O,O,O,O,O,O]
[I,O,I,O,O,I]
うん、それはそれがすべきものを変えた。