Tuesday, May 13, 2014

Mi primer post sobre Julia

Así que...que es Julia? Tan solo otro bonito lenguaje de programación -;)

De acuerdo con sus creadores...

Julia is a high-level, high-performance dynamic programming language for technical computing, with syntax that is familiar to users of other technical computing environments.

Julia es un lenguage dinámico de alto nivel y alta performance para computación técnica, con sintaxis que es familiar para usuarios de otros entornos de computación técnica.



Recién comencé a aprenderlo hace algunos días...y debo decir que realmente me gusta...tiene una sintaxis parecida a Python así que me sentí comodo desde el principio...

Por supuesto...es prácticamente un nuevo lenguaje, así que hay cosas que se están agregando y corrigiendo mientras hablamos...pero la comunidad está creciendo y me alegra estar entre sus primeros entusiastas -:)

Lo primero que hice después de leer la documentación y ver algunos videos fué simplemente pasar una de mis antiguas aplicaciones hecha en Python a Julia...la aplicación fué "LCD Numbers" la cual simplemente pide un número y lo retorna impreso con formato LCD...

Este es el código en Python...

LCD_Numbers.py
global line1, line2, line3

line1 = ""
line2 = ""
line3 = ""

zero = {1: ' _  ', 2: '| | ', 3: '|_| '}
one = {1: '  ', 2: '| ', 3: '| '}
two = {1: ' _  ', 2: ' _| ', 3: '|_  '}
three = {1: '_  ', 2: '_| ', 3: '_| '}
four = {1: '    ', 2: '|_| ', 3: '  | '}
five = {1: ' _  ', 2: '|_  ', 3: ' _| '}
six = {1: ' _  ', 2: '|_  ', 3: '|_| '}
seven = {1: '_   ', 2: ' |  ', 3: ' |  '}
eight = {1: ' _  ', 2: '|_| ', 3: '|_| '}
nine = {1: ' _  ', 2: '|_| ', 3: ' _| '}

num_lines = {0: zero, 1: one, 2: two, 3: three, 4: four,
             5: five, 6: six, 7: seven, 8: eight, 9: nine}

def Lines(number):
    global line1, line2, line3
    line1 += number.get(1, 0)
    line2 += number.get(2, 0)
    line3 += number.get(3, 0)

number = str(input("\nEnter a number: "))
length = len(number)
for i in range(0, length):
    Lines(num_lines.get(int(number[i:i+1]), 0))

print ("\n")
print line1
print line2
print line3
print ("\n") 
Y este es en cambio...su version en Julia...

LCD_Numbers.jl
zero = [1=> " _  ", 2=> "| | ", 3=> "|_| "]
one = [1=> "  ", 2=> "| ", 3=> "| "]
two = [1=> " _  ", 2=> " _| ", 3=> "|_  "]
three = [1=> "_  ", 2=> "_| ", 3=> "_| "]
four = [1=> "    ", 2=> "|_| ", 3=> "  | "]
five = [1=> " _  ", 2=> "|_  ", 3=> " _| "]
six = [1=> " _  ", 2=> "|_  ", 3=> "|_| "]
seven = [1=> "_   ", 2=> " |  ", 3=> " |  "]
eight = [1=> " _  ", 2=> "|_| ", 3=> "|_| "]
nine = [1=> " _  ", 2=> "|_| ", 3=> " _| "]

num_lines = [0=> zero, 1=> one, 2=> two, 3=> three, 4=> four,
             5=> five, 6=> six, 7=> seven, 8=> eight, 9=> nine]

line = ""; line1 = ""; line2 = ""; line3 = ""

function Lines(number, line1, line2, line3)
    line1 *= number[1]
    line2 *= number[2]
    line3 *= number[3]
    line1, line2, line3
end

println("Enter a number: "); number = chomp(readline(STDIN))
len = length(number)
for i in [1:len]
    line = Lines(num_lines[parseint(string(number[i]))],line1,line2,line3)
    line1 = line[1]; line2 = line[2]; line3 = line[3]
end

println(line1)
println(line2)
println(line3 * "\n")

Como pueden ver...el código se ve bastante familiar...pero por supuesto...me deshice de todas esas horribles variables globales...y utilicé algunas de las impresionantes capacidades de Julia, como retorno múltiple de valores y definición de variables en una sola línea... si quieren ver el output...aquí está...


Por supuesto...este es solo un test...las cosas se van a poner interesantes cuando pase un poco de código en R hacia Julia y haga algunas comparaciones de velocidad -;)

Saludos,

Blag.
Development Culture.

No comments: