Primero...no existe algo como arrays asociativos en Erlang...también...solo puedes asignar variables una vez...encima de todo, no hay loops...pero...a quien le importa...la programación funcional es divertida -;)
Por supuesto...mi código podría haber sido hecho mejor...pero...estoy aprendiendo...y programando aprendo más...así que por mi está bien...
Esto es lo que escribí -;)
| roman_numerals.erl |
|---|
-module(roman_numerals).
-export([showRomans/1]).
-define(DECIMALS,{1000,900,500,400,100,90,50,40,10,9,5,4,1}).
showRomans(Number) when is_integer(Number) ->
showRomans(Number,1,"").
showRomans(0,_,Acc) ->
io:format("~s~n",[Acc]);
showRomans(Number,Counter,Acc) ->
case Number >= element(Counter,?DECIMALS) of
true -> showRomans(Number - element(Counter,?DECIMALS),
Counter,Acc ++ make_roman(element(Counter,?DECIMALS)));
false -> showRomans(Number,Counter + 1,Acc)
end.
make_roman(1) -> "I";make_roman(4) -> "IV";make_roman(5) -> "V";
make_roman(9) -> "IX";make_roman(10) -> "X";make_roman(40) -> "XL";
make_roman(50) -> "L";make_roman(90) -> "XC";make_roman(100) -> "C";
make_roman(400) -> "CD";make_roman(500) -> "D";make_roman(900) -> "CM";
make_roman(1000) -> "M".
|
Cuando lo ejecutamos...podemos ver que funciona bastante bien -;)
Como pueden ver...Erlang es todo acerca de funciones, recursividad, acumuladores y una nueva forma de pensar -:)
Saludos,
Blag.
Development Culture.

No comments:
Post a Comment