RosettaCodeData/Task/Range-expansion/OCaml/range-expansion.ocaml

24 lines
542 B
Text
Raw Permalink Normal View History

2013-04-10 23:57:08 -07:00
#load "str.cma"
let range a b =
if b < a then invalid_arg "range";
let rec aux i acc =
2019-09-12 10:33:56 -07:00
if i = b then List.rev (i::acc)
2013-04-10 23:57:08 -07:00
else aux (succ i) (i::acc)
in
aux a []
let parse_piece s =
try Scanf.sscanf s "%d-%d" (fun a b -> range a b)
with _ -> [int_of_string s]
let range_expand rng =
let ps = Str.split (Str.regexp_string ",") rng in
List.flatten (List.map parse_piece ps)
let () =
let rng = "-6,-3--1,3-5,7-11,14,15,17-20" in
let exp = range_expand rng in
List.iter (Printf.printf " %d") exp;
2019-09-12 10:33:56 -07:00
print_newline ()