Wednesday, August 06, 2014

Decimal a Romanos - Al estilo Erlang

Mientras continúo con mi aprendizaje de  Erlang...decidí tratar de hacer una aplicación de Números Decimales a Romanos...tal como lo he hecho con otros lenguajes de programación en el pasado...y no fué tan fácil como pensaba -:)

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: