commit 25a27f7fc48436cfbb35c44cec5e56a29e53f170 parent 7ce4658d30d7742d22a6e3d5bf8321f4019b7894 Author: NunoSempere <nuno.sempere@protonmail.com> Date: Sun, 15 Oct 2023 01:14:41 +0100 fix: add tail recursion Diffstat:
| M | ocaml/out/samples | | | 0 | |
| M | ocaml/out/samples.cmi | | | 0 | |
| M | ocaml/out/samples.cmx | | | 0 | |
| M | ocaml/out/samples.o | | | 0 | |
| M | ocaml/samples.ml | | | 12 | +++++++++++- |
5 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/ocaml/out/samples b/ocaml/out/samples Binary files differ. diff --git a/ocaml/out/samples.cmi b/ocaml/out/samples.cmi Binary files differ. diff --git a/ocaml/out/samples.cmx b/ocaml/out/samples.cmx Binary files differ. diff --git a/ocaml/out/samples.o b/ocaml/out/samples.o Binary files differ. diff --git a/ocaml/samples.ml b/ocaml/samples.ml @@ -34,7 +34,16 @@ let findIndex xs test = in recursiveHelper xs 0 -let rec unwind xs = +let unwind xs = + let rec tailRecursiveHelper ys acc = + match ys with + | [] -> Ok(acc) + | Error e :: _ -> Error e + | Ok(y) :: ys -> tailRecursiveHelper ys (y :: acc) + in + tailRecursiveHelper xs [] + + (* previous version, which wasn't tail-recursive match xs with | [] -> Ok([]) | Error e:: ys -> Error e @@ -43,6 +52,7 @@ let rec unwind xs = | Ok(zs) -> Ok(y :: zs) | Error e -> Error e ) + *) (* Basic samplers *) let sampleZeroToOne () : float = Random.float 1.0