Skip to content

Instantly share code, notes, and snippets.

@MarisaKirisame
Created November 2, 2023 13:30
Show Gist options
  • Save MarisaKirisame/91dd910c7cb0471ebd4bbb26c114b7a7 to your computer and use it in GitHub Desktop.
Save MarisaKirisame/91dd910c7cb0471ebd4bbb26c114b7a7 to your computer and use it in GitHub Desktop.
type gen = | Init | Gen of bool | Running of bool * bool * gen
let flip () = true
let one_in_three() = true
let rec generate g =
match g with
| Init -> generate (Running (true, true, Init))
| Gen b ->
if one_in_three() then
generate (Running (true, true, Gen b))
else if b then
generate (Running (true, false, Init)) else
generate (Running (false, true, Init))
| Running (true, false, x) -> (false, Running(false, false, x))
| Running (false, true, x) -> (true, Running(false, false, x))
| Running (true, true, x) ->
if flip() then (false, Running(false, true, x)) else (true, Running(true, false, x))
| Running (false, false, x) -> let (ret, x_) = generate x in (ret, Running(true, true, x_))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment