[EMAIL PROTECTED] wrote (on Rebol_New):
> I'd like to learn how to do symbolic differentiation and parse roman
numerals to get arabic numbers. I've read the docs, but nothing sinks in. I
believe I need to use the dialog method. Does anybody know how to do these?

My rather boring Roman numerals converter implementation is attached.

Andrew Martin
Partying like it's MIM...
ICQ: 26227169
http://members.xoom.com/AndrewMartin/
-><-

[
REBOL [
        Title: "Roman"
        File: %Roman.r
        Date: 6/February/2000
        ]

Roman2I: function [Roman [string!]][Rules Total][
        Total: 0
        Rules: [
                "DM" (Total: Total - 500 + 1000) |
                "CM" (Total: Total - 100 + 1000) |
                "CD" (Total: Total - 100 + 500) |
                "LM" (Total: Total - 50 + 1000) |
                "LD" (Total: Total - 50 + 500) |
                "LC" (Total: Total - 50 + 100) |
                "XM" (Total: Total - 10 + 1000) |
                "XD" (Total: Total - 10 + 500) |
                "XC" (Total: Total - 10 + 100) |
                "XL" (Total: Total - 10 + 50) |
                "VM" (Total: Total - 5 + 1000) |
                "VD" (Total: Total - 5 + 500) |
                "VC" (Total: Total - 5 + 100) |
                "VL" (Total: Total - 5 + 50) |
                "VX" (Total: Total - 5 + 10) |
                "IM" (Total: Total - 1 + 1000) |
                "ID" (Total: Total - 1 + 500) |
                "IC" (Total: Total - 1 + 100) |
                "IL" (Total: Total - 1 + 50) |
                "IX" (Total: Total - 1 + 10) |
                "IV" (Total: Total - 1 + 5) |
                #"M" (Total: Total + 1000) |
                #"D" (Total: Total + 500) |
                #"C" (Total: Total + 100) |
                #"L" (Total: Total + 50) |
                #"X" (Total: Total + 10) |
                #"V" (Total: Total + 5) |
                #"I" (Total: Total + 1)
                ]
        if parse Roman [any Rules] [
                return Total
                ]
        0
        ]

I2Roman: function [Integer [integer!]][Result Arabic_Roman][
        if any [
                Integer < 0
                10000 < Integer
                ][
                return make string! Integer
                ]
        Result: make string! 0
        Arabic_Roman: reduce [
                       1000 "M"
                  -1 + 1000 "IM"
                ;  -5 + 1000 "VM"
                 -10 + 1000 "XM"
                ; -50 + 1000 "LM"
                -100 + 1000 "CM"
                ;-500 + 1000 "DM"
                        500 "D"
                  -1 +  500 "ID"
                ;  -5 +  500 "VD"
                 -10 +  500 "XD"
                ; -50 +  500 "LD"
                -100 +  500 "CD"
                        100 "C"
                  -1 +  100 "IC"
                ;  -5 +  100 "VC"
                 -10 +  100 "XC"
                ; -50 +  100 "LC"
                         50 "L"
                  -1 +   50 "IL"
                ;  -5 +   50 "VL"
                 -10 +   50 "XL"
                         10 "X"
                  -1 +   10 "IX"
                ;  -5 +   10 "VX"
                          5 "V"
                  -1 +    5 "IV"
                          1 "I"
                ]
        foreach [Arabic Roman] Arabic_Roman [
                while [Arabic <= Integer][
                        append Result Roman
                        Integer: Integer -  Arabic
                        ]
                ]
        Result
        ]

print ["Roman:" Roman2I probe "MCMLXII"]
print ["I2Roman:" I2Roman probe 1962]

]

Reply via email to