RosettaCodeData/Task/Roman-numerals-Decode/Scheme/roman-numerals-decode-1.ss
2015-02-20 00:35:01 -05:00

12 lines
337 B
Scheme

(use gauche.collection) ;; for fold2
(define (char-val char)
(define i (string-scan "IVXLCDM" char))
(* (expt 10 (div i 2)) (expt 5 (mod i 2))))
(define (decode roman)
(fold2
(lambda (n sum prev-val)
(values ((if (< n prev-val) - +) sum n) (max n prev-val)))
0 0
(map char-val (reverse (string->list roman)))))