Entradas

Mostrando entradas de 2013

Más comentarios sobre ejemplos sencillos Elixir

Recientemente un compañero de trabajo me propuso calcular el menor número triangular que tenga más de 500 factores. (Ejercicio que apareció en  project Euler ) Después de hacerlo en C++, quise probar en Elixir para ver que tal podría quedar y si sería tan divertido como esperaba. El algoritmo es trivial, pero trataba de buscar una solución elegante en un lenguaje tan expresivo. Esta es la solución. defmodule Triangle_factors do def find_triangle_more_n_f nfactors do [result] = Stream .unfold({ 1 , 1 }, fn {t, n} -> {t, {t+n+ 1 , n+ 1 }} end ) |> ( Stream .drop_while &(num_factors(& 1 ) <= nfactors)) |> Enum .take 1 end defp num_factors n do r2 = :erlang .trunc :math .sqrt n ( 1 ..r2 |> Enum .count fn(x) -> rem(n, x) === 0 end ) * 2 - ( if n===r2*r2, do: 1 , else: 0 ) end end NOTE Repito este programa para utilizarlo como exc

Ejemplos básicos con Elixir

Hello world IO .puts "Hello world!" Nada de  clases  con cosas  estáticas , sencillo sencillo También valdría… IO .puts( "Hello world!" ) IO.puts  es una función incluso cuando no tiene paréntesis. Los paréntesis son opcionales, como en  ruby WARNING No olvides no dejar espacio entre el nombre de la función y  ( Ahora lo ponemos en un módulo Hello world2 defmodule Hello_world do def hello do IO .puts "Hello world!" end end Y ahora un poquito más elaborado Hello defmodule Basic do def say_hello name do IO .puts "Hello #{name} " end end Sí señor,  string interpolation , esto mola ¿Cómo pueden vivir algunos sin esto (C++, Java, python…)? Para probar, ejecutar desde  iex c"basic.ex" Basic.say_hello "Jose" Y ahora un  pequeño  cambio defmodule Basic do IO .puts "I say hello you&q