in reply to
Rosetta PGA-TRAM
In OCaml
let explode str =
let rec aux pos acc =
if pos < 0 then acc
else aux (pred pos) (str.[pos] :: acc)
in aux ((String.length str)-1) []
let d2a = function
| 'M' -> 1000
| 'D' -> 500
| 'C' -> 100
| 'L' -> 50
| 'X' -> 10
| 'V' -> 5
| 'I' -> 1
| _ -> failwith "Incorrect character"
let r2d str =
List.fold_left (fun acc x -> let x' = d2a x in acc + x' - acc mod
+x' * 2) 0 (explode (String.uppercase str));;
- explode just converts a string into a list of its characters. The future standard library for OCaml, named Batteries included will include such a function by default.
- The functional nature of OCaml allows a natural implementation of the algorithm