Sleeping Beauty problem: Difference between revisions

Content added Content deleted
(→‎{{header|Haskell}}: added solution)
m (→‎{{header|Haskell}}: small simplification)
Line 312: Line 312:
data Toss = Heads | Tails deriving Show
data Toss = Heads | Tails deriving Show


anExperiment toss =
sleepingBeautyExperiment = foldMap anExperiment
moreWakenings <>
case toss of
Heads -> headsOnWaking
Tails -> moreWakenings
where
where
anExperiment toss = moreWakenings <>
case toss of
Heads -> headsOnWaking
Tails -> moreWakenings
moreWakenings = (1,0)
moreWakenings = (1,0)
headsOnWaking = (0,1)
headsOnWaking = (0,1)
Line 323: Line 323:
main = do
main = do
tosses <- map (bool Heads Tails) <$> replicateM 1000000 randomIO
tosses <- map (bool Heads Tails) <$> replicateM 1000000 randomIO
let (Sum w, Sum h) = sleepingBeautyExperiment tosses
let (Sum w, Sum h) = foldMap anExperiment tosses
let ratio = fromIntegral h / fromIntegral w
let ratio = fromIntegral h / fromIntegral w
putStrLn $ "Ratio: " ++ show ratio</lang>
putStrLn $ "Ratio: " ++ show ratio</lang>