RosettaCodeData/Task/Greatest-subsequential-sum/Standard-ML/greatest-subsequential-sum.ml
2023-07-01 13:44:08 -04:00

18 lines
482 B
OCaml

val maxsubseq = let
fun loop (_, _, maxsum, maxseq) [] = (maxsum, rev maxseq)
| loop (sum, seq, maxsum, maxseq) (x::xs) = let
val sum = sum + x
val seq = x :: seq
in
if sum < 0 then
loop (0, [], maxsum, maxseq) xs
else if sum > maxsum then
loop (sum, seq, sum, seq) xs
else
loop (sum, seq, maxsum, maxseq) xs
end
in
loop (0, [], 0, [])
end;
maxsubseq [~1, ~2, 3, 5, 6, ~2, ~1, 4, ~4, 2, ~1]