Entradas

El martillo en informática

En la siguiente página, proponen una comparativa de "herramientas" valorando puntos fuertes y débiles en una lista de características predeterminadas. http://hammerprinciple.com/ La siguiente sección, es para lenguajes de programación. http://hammerprinciple.com/therighttool Las valoraciones, se obtienen de por votación de quien quiera aportar. La idea es muy buena, y el resultado es interesante. Que haya preguntas positivas y negativas, crea un poco de confusión. Esto hace que la columna  lo hace bien  no es equivalente a  puntos fuertes En C++ por ejemplo, está en la columna  "lo hace bien" : This language makes it easy to shoot yourself in the foot There is a lot of accidental complexity when writing code in this language I often feel like I am not smart enough to write this language Writing code in this language is a lot of work Que evidentemente no es positivo. Por otro lado, tendríamos la doble negaci...

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...

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...