Sleeping Beauty problem: Difference between revisions

→‎{{header|Python}}: Added a functionally composed variant.
(→‎{{header|Raku}}: Add a Raku example)
(→‎{{header|Python}}: Added a functionally composed variant.)
Line 146:
 
=={{header|Python}}==
===Procedural===
<lang python>from random import choice
 
Line 184 ⟶ 185:
Results of experiment: Sleeping Beauty should estimate a credence of: 0.333542254953276
</pre>
 
 
===Functional===
 
<lang python>'''Sleeping Beauty Problem'''
 
from random import choice
from itertools import repeat
from functools import reduce
 
 
# experiment :: IO Int -> (Int, Int) -> IO (Int, Int)
def experiment(headsWakings):
'''A pair of counts updated by a coin flip.
'''
heads, wakings = headsWakings
 
return (
1 + heads, 1 + wakings
) if "h" == choice(["h", "t"]) else (
heads, 2 + wakings
)
 
 
# ------------------------- TEST -------------------------
# main :: IO ()
def main():
'''Observed results from one million runs.'''
 
n = 1_000_000
heads, wakes = applyN(n)(
experiment
)(
(0, 0)
)
 
print(
f'{wakes} wakenings over {n} experiments.\n'
)
print('Sleeping Beauty should estimate credence')
print(f'at around {round(heads/wakes, 3)}')
 
 
# ----------------------- GENERIC ------------------------
 
# applyN :: Int -> (a -> a) -> a -> a
def applyN(n):
'''n applications of f.
(Church numeral n).
'''
def go(f):
def ga(a, g):
return g(a)
 
def fn(x):
return reduce(ga, repeat(f, n), x)
return fn
return go
 
 
# MAIN ---
if __name__ == '__main__':
main()</lang>
{{Out}}
<pre>1500188 wakenings over 1000000 experiments.
 
Sleeping Beauty should estimate credence
at around 0.333</pre>
 
=={{header|Raku}}==
9,655

edits