fork(1) download
  1. let fx = [|
  2. (=) 5, fun i -> printf "1"
  3. (=) 3, fun k -> printf "2"
  4. (=) 3, fun l -> printf "3"
  5. (=) 5, fun m -> printf "4"
  6. (=) 3, fun n -> printf "5"
  7. |]
  8.  
  9. let foo x =
  10. printfn "\nEnter a label: "
  11. x := System.Console.ReadLine() |> int
  12.  
  13. let ix = Array.create fx.Length 0
  14. let label = ref 0
  15. printfn "label = %i" !label
  16. let rec loop i =
  17. if i >= ix.Length then
  18. foo label
  19. printfn "newlabel = %i" !label
  20. next !label
  21. else
  22. ix.[i] <- 0
  23. snd fx.[i] <| ix.[i]
  24. loop (i + 1)
  25. and next n =
  26. let n = n - 1
  27. if n < 0 || n >= fx.Length then printfn "The end!" else
  28. ix.[n] <- ix.[n] + 1
  29. if ix.[n] |> fst fx.[n] then next n else
  30. snd fx.[n] <| ix.[n]
  31. loop (n + 1)
  32. loop 0
  33.  
Success #stdin #stdout 0.08s 24760KB
stdin
1
2
3
4
5
768
stdout
label = 0
12345
Enter a label: 
newlabel = 1
12345
Enter a label: 
newlabel = 2
2345
Enter a label: 
newlabel = 3
345
Enter a label: 
newlabel = 4
45
Enter a label: 
newlabel = 5
5
Enter a label: 
newlabel = 768
The end!