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