[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]
]