let rec f n =
let rec aux m x y = match m with
_ when n < m -> y
| 0 -> aux (m + 1) y (num_of_int 4)
| 1 -> aux (m + 1) y (num_of_string "17/4")
| _ -> aux (m + 1) y ((num_of_int 108) -/ (num_of_int 815) // y +/ (num_of_int 1500) // (y */ x))
in aux 0 (num_of_int 0) (num_of_int 0)
let (<<) f g x = f (g x)
let () =
println @@ f 0;
println @@ f 1;
println @@ f 2;
println @@ f 3;
println @@ f 80;
b3BlbiBOdW0KbGV0IHJlYyBmIG4gPQogIGxldCByZWMgYXV4IG0geCB5ID0gbWF0Y2ggbSB3aXRoCiAgICAgIF8gd2hlbiBuIDwgbSAtPiB5CiAgICB8IDAgLT4gYXV4IChtICsgMSkgeSAobnVtX29mX2ludCA0KQogICAgfCAxIC0+IGF1eCAobSArIDEpIHkgKG51bV9vZl9zdHJpbmcgIjE3LzQiKQogICAgfCBfIC0+IGF1eCAobSArIDEpIHkgKChudW1fb2ZfaW50IDEwOCkgLS8gKG51bV9vZl9pbnQgODE1KSAvLyB5ICsvIChudW1fb2ZfaW50IDE1MDApIC8vICh5ICovIHgpKQogIGluIGF1eCAwIChudW1fb2ZfaW50IDApIChudW1fb2ZfaW50IDApCmxldCAoPDwpIGYgZyB4ID0gZiAoZyB4KQpsZXQgcHJpbnRsbiA9IHByaW50X25ld2xpbmUgPDwgcHJpbnRfc3RyaW5nIDw8IGFwcHJveF9udW1fZml4IDMwCmxldCAoKSA9CiAgcHJpbnRsbiBAQCBmIDA7CiAgcHJpbnRsbiBAQCBmIDE7CiAgcHJpbnRsbiBAQCBmIDI7CiAgcHJpbnRsbiBAQCBmIDM7CiAgcHJpbnRsbiBAQCBmIDgwOwo=