17 lines
522 B
Forth
17 lines
522 B
Forth
|
|
let decimal_of_roman roman =
|
||
|
|
let convert (arabic,lastval) c =
|
||
|
|
let n = match c with
|
||
|
|
| 'M' | 'm' -> 1000
|
||
|
|
| 'D' | 'd' -> 500
|
||
|
|
| 'C' | 'c' -> 100
|
||
|
|
| 'L' | 'l' -> 50
|
||
|
|
| 'X' | 'x' -> 10
|
||
|
|
| 'V' | 'v' -> 5
|
||
|
|
| 'I' | 'i' -> 1
|
||
|
|
| _ -> 0
|
||
|
|
let op = if n > lastval then (-) else (+)
|
||
|
|
(op arabic lastval, n)
|
||
|
|
let (arabic, lastval) = Seq.fold convert (0,0) roman
|
||
|
|
arabic + lastval
|
||
|
|
;;
|