Advertisement
alcidesfp

num-roman.rkt

Feb 4th, 2012
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;; -*- coding: utf-8; mode: scheme -*-
  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.         (base 10)
  20.         (residuo 0))
  21.     (do ((cantidad numero)) ((= cantidad 0) retval)
  22.       (set! residuo (remainder cantidad base))
  23.       (set! retval (append retval (list residuo) ))
  24.       (set! cantidad (quotient cantidad base)) ) ) )
  25. ;;------------------------------------------------------------------------
  26. (provide num-roman)
  27.  
  28. (define (num-roman arabigo)
  29.   (let ((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. ;;------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement