diff --git a/ocaml/out/samples b/ocaml/out/samples index 6be50b33..f23bec4e 100755 Binary files a/ocaml/out/samples and b/ocaml/out/samples differ diff --git a/ocaml/out/samples.cmi b/ocaml/out/samples.cmi index ffb67565..67a0c682 100644 Binary files a/ocaml/out/samples.cmi and b/ocaml/out/samples.cmi differ diff --git a/ocaml/out/samples.cmx b/ocaml/out/samples.cmx index ace4eda3..4065573b 100644 Binary files a/ocaml/out/samples.cmx and b/ocaml/out/samples.cmx differ diff --git a/ocaml/out/samples.o b/ocaml/out/samples.o index 769e2aff..df7a9bd0 100644 Binary files a/ocaml/out/samples.o and b/ocaml/out/samples.o differ diff --git a/ocaml/samples.ml b/ocaml/samples.ml index a2c4b136..38749406 100644 --- 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