Roman numerals/Encode: Difference between revisions

no edit summary
(→‎ALGOL 68: manually wrapped ridiculously long sample output)
No edit summary
Line 438:
writefln("%20s - %s", x, toRoman(x)) ;
}</lang>
 
=={{header|Erlang}}==
{{trans|OCaml}}
<lang erlang>
-module(roman).
-export([to_roman/1]).
 
to_roman(0) -> [];
to_roman(X) when X >= 1000 -> "M" ++ to_roman(X-1000);
to_roman(X) when X >= 100 -> digit(X div 100, $C,$D,$M) ++ to_roman(X rem 100);
to_roman(X) when X >= 10 -> digit(X div 10, $X,$L,$C) ++ to_roman(X rem 10);
to_roman(X) when X >= 1 -> digit(X, $I,$V,$X).
 
digit(1,X,_,_) -> [X];
digit(2,X,_,_) -> [X,X];
digit(3,X,_,_) -> [X,X,X];
digit(4,X,Y,_) -> [X,Y];
digit(5,_,Y,_) -> [Y];
digit(6,X,Y,_) -> [Y,X];
digit(7,X,Y,_) -> [Y,X,X];
digit(8,X,Y,_) -> [Y,X,X,X];
digit(9,X,_,Z) -> [X,Z].
</lang>
 
sample:
<pre>
1> c(roman).
{ok,roman}
2> roman:to_roman(1999).
"MCMXCIX"
3> roman:to_roman(25).
"XXV"
4> roman:to_roman(944).
"CMXLIV"
</pre>
 
=={{header|Factor}}==
Anonymous user