View difference between Paste ID: dewmJL50 and X1YVJjaB
SHOW: | | - or go back to the newest paste.
1
;; -*- coding: utf-8; mode: scheme -*-
2-
;; num-roman.rkt
2+
;; $Id: num-roman.rkt,v 1.6 2012/02/04 21:44:33 alcides_fp Exp $
3
#lang racket
4
5
(provide numeral)
6
7
(define (numeral digito posicion)
8
  (let ((matriz-numerales 
9
         #(#("" "I" "II" "III" "IV" "V" "VI" "VII" "VIII" "IX")
10
           #("" "X" "XX" "XXX" "XL" "L" "LX" "LXX" "LXXX" "XC")
11
           #("" "C" "CC" "CCC" "CD" "D" "DC" "DCC" "DCCC" "CM")
12
           #("" "M" "MM" "MMM"))))
13
    (vector-ref (vector-ref matriz-numerales posicion) digito) ))
14
;;------------------------------------------------------------------------
15
(provide dec->list)
16
17
(define (dec->list numero) 
18
  (let ((retval '())
19-
        (cadena-num '())
19+
        (base 10)
20
        (residuo 0))
21
    (do ((cantidad numero)) ((= cantidad 0) retval)
22
      (set! residuo (remainder cantidad base))
23-
    (set! cadena-num (reverse (string->list (number->string arabigo))))
23+
      (set! retval (append retval (list residuo) ))
24-
    (set! longitud (length cadena-num))
24+
      (set! cantidad (quotient cantidad base)) ) ) )
25
;;------------------------------------------------------------------------
26
(provide num-roman)
27-
         (set! digito (- (char->integer (list-ref cadena-num posicion)) 48))
27+
28
(define (num-roman arabigo)
29
  (let ((retval "")
30-
    retval ))
30+
        (lista-cifras '())
31
        (longitud 0)
32
        (digito 0))
33
34
    (set! lista-cifras (dec->list arabigo))
35
    (set! longitud (length lista-cifras))
36
37
    (for ((posicion longitud))
38
         (set! digito (list-ref lista-cifras posicion))
39
         (set! retval (string-append (numeral digito posicion) retval)) )
40
41
    retval ))
42
;;------------------------------------------------------------------------