Ir al contenido principal

Entradas

Mostrando entradas de 2014

Clojure: instalando Leiningen

Existe una herramienta llamada Leiningen que nos permite crear proyectos en Clojure de manera más ordenada. También podemos hacer uso del REPL de Clojure mediante esta herramienta. ¿Cómo se instala Leiningen ? Debemos seguir 4 pasos. Descargar este script   Guardarlo en nuestro $PATH como lein(o lein.bat si usan Windows). En Linux darle permisos de ejecución: chmod a+x /bin/lein. Desde terminal escribir lein para empezar. Actualización. Existe otra forma para instalar Leiningen. Es necesario contar con SDKMAN! instalado. Teclear en una terminal: $ sdk install leiningen Eso es todo, ya tendremos instalada esta herramienta. Enlaces de interés http://alexott.net/en/clojure/ClojureLein.html http://www.bagdemir.com/2011/07/04/creating-new-projects-with-leiningen/ http://blog.8thlight.com/colin-jones/2010/11/26/a-leiningen-tutorial.html

Creando funciones: Clojure y Scala

¿Qué es una Función?,¿Para qué sirve? En programación, se considera un conjunto de sentencias que nos permiten resolver un problema determinado, también se considera un mini programa dentro de un programa. Estas funciones pueden o no devolvernos un resultado.                                  Función =   Entrada + Procesos + Salida Donde: Entrada: son las variables que conocemos del problema. Procesos: son las operaciones lógicas y matemáticas que resolverán un problema. Salida: es el resultado que queremos obtener. Ejemplo. Imaginemos que necesitamos resolver una operación aritmética como el cálculo del área y volumen de un cilindro. La entrada serán las variables base(b) y altura(h), los procesos son las operaciones aritméticas, y el resultado de esas operaciones (área y volumen) serán la salida. Fórmulas: área= 2*PI*base*base+2*PI*base*altura; volumen=PI*base*base*altura; Escribiremos el siguiente pseudocódigo: const PI= 3.14159; function obtener_area(b

Clojure ... interoperabilidad con Java: JOptionPane (2)

En el post anterior se trato de JOptionPane , algunos ejemplos del uso de los métodos showInputDialog y showMessageDialog . En esta ocasión usaremos el método showConfirmDialog para hacer una pregunta. Código Clojure ;;Importamos la librería javax.swing ( import '(javax.swing JOptionPane));' ( try ;; variable "pregunta" ( def pregunta      (JOptionPane/showConfirmDialog nil,       ( str " Estas de acuerdo en que Clojure es mejor que Lisp?" )     ) )       ;;la variable pregunta devolverá un valor entre 0, si es OK; 1, si es No; 2, si es Cancelar    ( if (= pregunta 0)        (JOptionPane/ showMessageDialog nil,         ( str "Bien, estas de acuerdo" )        )        ( if (= pregunta 1)           (JOptionPane/ showMessageDialog nil,             ( str "Claro, entiendo que no todos pueden estar de acuerdo" )           )           ((JOptionPane/ showMessageDialog nil,             ( str "Operaci

Katas (en programación)

¿Qué son las Katas (en programación)? Son ejercicios de programación que nos ayudan a mejorar nuestras técnicas y habilidades en programación. Ejemplos como: Obtener la raíz de un número usando solo restas Determinar los primeros 25 números primos usando tan solo un bucle Calcular un cuadrado mágico usando recursividad Etc. Son solo algunos ejemplos de katas de código.  Muchas veces requiere tener bastante práctica ( la práctica hace al maestro ), leer varias veces para entender los problemas, comprender y saber usar las sentencias de control (selectivas y repetitivas). Existen sitios como http://www.solveet.com/  que contienen una gran cantidad de ejercicios y retos de programación publicadas en su mayoría por usuarios. Links http://mundogeek.net/archivos/2011/03/02/katas-de-codigo/ http://ejerciciosdeprogramacion.com/

Clojure ... interoperabilidad con Java: JOptionPane

"Cuando el alumno está listo, aparece el maestro, o al menos eso dicen" En el post anterior vimos un ejemplo del uso de JOptionPane en código Clojure, ahora veremos como introducir datos usando el método showInputDialog. 1. Introduciendo un dato tipo 'String', el método no necesita  argumento. ;;importar librería ( import '(javax.swing JOptionPane));' ;;defino el método introduceDato ( defn introduceDato []     (JOptionPane/ showInputDialog          ( str "Introduce una cadena:" )      ) ) ;;lo usamos así ( def entrada (introduceDato)) ;;imprimimos (JOptionPane/ showMessageDialog nil,    ( str "Cadena: " entrada) ) Resultado: 2. Método que decide si un número es menor a 100 ( import '(javax.swing JOptionPane));' ( defn esMenor? [n]   ( if (< n 100) (JOptionPane/ showMessageDialog nil,       ( str n " es menor a 100" ) )  (JOptionPane/ showMessageDialog nil,       ( str n&quo

Clojure ... interoperabilidad con Java

"Clojure ... ese lenguaje inventado por sumerios" - Phillips, el programador anónimo ¿Qué puedo hacer con Clojure que no pueda hacer en Java ? , para responder esta pregunta hay que entender que la filosofía que manejan ambos lenguajes es distinta,básicamente: Clojure es funcional  Java es orientado a objetos ;; un simple mensaje en Clojure ( println "Clojure es un lenguaje funcional ..." )   //en Java escribimos más código class Mensaje{      public static void hola(){            System.out.println( "Java es orientado a objetos" );      } } Clojure permite interoperabilidad con Java (al ser dependiente de la JVM), podemos hacer uso de sus librerías. También podemos hacer uso de clases en nuestros scripts. En este ejemplo vamos a mostrar una ventanita tipo alert con ayuda de Java Swing (javax.swing). ;;importamos la librería ( import '( javax.swing JOptionPane)) ;' ;;hacemos uso de JOptionPane.showMessageDialog(n

Python, el ahora es mejor que el nunca

Cuando iniciamos en este mundo de la programación muchas veces nos encontramos perdidos. No sabemos que lenguaje usar y el por qué nos conviene uno de otro. Creo  no se pierde nada echarle un vistazo a los lenguajes y decidir cual nos conviene.  ¿Qué lenguaje elegir para iniciar? El lenguaje preferido de algunos profesores sigue siendo C. Nada como empezar con el famoso "¡Hola, mundo! En C: #include<stdio.h> void main (){    print ( "¡Hola, mundo!" ); } En Python: print "¡Hola, mundo!" #mucho más sencillo Después viene cosas más interesantes y complejas como las funciones (o como les conocían algunos "programitas sobre otros programitas"), estructuras de control (if,if-else,for,while...), y las estructuras de control (vectores, listas,árboles...). Independientemente del que elijamos necesitamos tener nociones de lógica, entender qué es un algoritmo,estudiar el lenguaje,  y lo más importante: practicar. Python puede s

Python, lo simple es mejor que lo complejo

Python es ... simple Antes de escribir el código es necesario hacer el siguiente análisis: Leer el problema y entenderlo Identificar variables y funciones Escribir paso a paso como se resuelve el problema Convertir esos pasos en código Ejemplo . Supongamos que queremos determinar el mayor de 5 números leídos del teclado. Paso 1 Esto es bastante claro. Hallar el número mayor de 5 números. Paso 2 entrada: 5 números introducidos por el usuario salida: mayor Paso 3 vector=[] mayor=0 para i=0 ; i<5 ; i++ hacer       "Introduce no. " +str(i+1)+ " : "        input vector[i] para j=0;j<0;j++ hacer       si  mayor<vector[i] entonces             mayor=vector[i] "mayor es " +str(mayor) Paso 4 Convertir el algoritmo en código. #aquí tenemos el código print "Introduce 5 numeros:" vector=[] #definimos una lista #introducimos 5 números for i in range (0,5):     numero= int ( raw_input ( 'introduce no.  '

Definir funciones en Clojure

Definir una función La sintaxis  es: ( defn nombreFunción [param1, param2,paramN]     ;; cuerpo de la función ) Las funciones pueden o no devolver un valor . Pueden o no tener argumentos. ;;mostrar un mensaje, no devuelve ningún valor ( defn mensaje     ( println "Este es un simple mensaje" ) ) ;;sumar dos números, devuelve el resultado ( defn suma [x1, x2]     (+ x1 x2) ) Invocamos las funciones: ( mensaje )  ( suma 23 45);;suma: 68 Ejemplo. Obtener la talla ideal de una persona con peso igual a 74.8 kg y un índice de masa corporal de 18.0. Fórmulas: imc(índice de masa corporal) =peso/(talla*talla) peso =imc*(talla*talla) (talla*talla) =peso/imc indice.clj ;;defino las funciones ( defn obtenerImc [p,t]   (/ p (* t t))) ( defn obtenerPeso [t,i]   (* i (* t t))) ( defn obtenerTalla [p,i]   (Math/sqrt (/ p i))) ;;defino dos variables: peso e imc ( def peso 74.8) ( def imc 18.0) ( try   ( println "talla ideal:" ( obtenerTa

Python, lo bello es mejor que lo feo

En el post anterior vimos como crear una clase en Python . Comparado con lenguajes como Java es bastante sencillo.  /*Java*/ public class Submarino{       private java.util.List<String> tripulacion;       public Submarino(){}       //getters y setters      ...      ... } ''' Python ''' class  Submarino( object ):        def __init__(self,tripulacion):                self.tripulacion=tripulacion Esto solo para crear una clase, pero si necesito que una clase herede atributos y método de una clase ... ¿existe la herencia en Python?. La respuesta es si. #clase Padre class Submarino( object ):          def tipo(self):              print "submarino militar" #clase hija class Submarino_Juguete( Submarino ):         def tipo(self):             print "submarino de juguete" #main submarinoJuguete=Submarino_Juguete() submarinoJuguete. tipo () print "tipo clase: ", type (submarinoJuguete) #tipo S

Crear 'clases' en Clojure

¿Cómo puedo crear un 'clase' en Clojure? ( defrecord Objeto [prop1 prop2  propN]) Para hacer uso de esta 'clase' escribimos lo siguiente: ( def miObjeto  "primerValor" "segundoValor" "otroMas") Ejemplo. Crear una 'clase' Fecha, con tres propiedades: dia,mes, y año ;;importamos la librería java.util.Scanner para introducir datos  ( import '(java.util Scanner))    ( def entrada(Scanner. *in*))   ;;creamos una interface para mostrar los valores tecleados ( defprotocol Servicio   (verFecha[this]))   ;;creamos la 'clase' Fecha e implementamos la interface Servicio ( defrecord Fecha[dia mes anyo]    Servicio    (verFecha[this]( println "Fecha: { dia:"dia" -mes: "mes" -anyo:"anyo"}")))  ;; probamos ( try   ( def miFecha(Fecha.  "23" "agosto" "1943"))   (verFecha miFecha)  ( println "Dia:")  ( def dia(.nextLine entrada)

Creando una clase en Python

Crear una clase en Python es bastante sencillo. En la siguiente imagen se muestra un ejemplo de una clase llamada 'Triángulo_equilátero'. En Python: ''' Clase '''   class   Triangulo_equilatero(object):       def __init__(self,altura,base,lado):                  self.altura=altura                  self.base=base                  self.lado=lado No es necesario crear métodos setter y getter. Podemos acceder a cualquier miembro/propiedad de la clase de la siguiente manera: ''' main ''' def main(): #instanciamos la clase      triangulo=Triangulo(2.8,3.0,3.0)      #mostramos valores      print "altura: %f , base: %f ,lado: %f\n"%(triangulo.altura,triangulo.base,triangulo.lado) if __name__='__main__':      main() Espero les sirva. http://mundogeek.net/archivos/2008/03/05/python-orientacion-a-objetos/

Uso de case en Clojure

En la otra ocasión vimos como introducir datos desde Clojure usando la librería java.util.Scanner , ahora veremos como hacer uso de 'case',es  algo parecido al switch de otros lenguajes como C y Java. Supongamos introducimos un número del 1 al 3. ( import '(java.util Scanner)) ( def entrada (Scanner. *in*)) ( println "Introduce un número del 1 al 3:") ( def numero (.nextLine entrada)) Ahora crearemos nuestro 'switch'. ( case numero   "1" ( println "Introduciste el numero 1")   "2" ( println "Introduciste el numero 2")   "3" ( println "Introduciste el numero 3") ) Si introduzco el número 1, mostrará el primer mensaje, pero ¿qué pasa si coloco otro número que no sean esos 3? Para ello definimos un "else" a ese 'switch': ( case numero   "1" ( println "Introduciste el numero 1")   "2" ( println "Introduciste el numero

Scanner en Clojure

Para introducir datos desde Clojure podemos importar la librería java.util.Scanner . Vamos hacer un ejemplo,mediante la fórmula: v=d/t , donde d=distancia,t=tiempo,  calcularemos la velocidad (v) obtenida. Un camión  recorre una distancia de 45 km en 15 minutos, ¿cuál es la velocidad que alcanza? entrada: distancia= 45 km , tiempo=15 min. salida: velocidad=¿? nombre del archivo: velocidad.clj ejecutar: java -jar clojure-1.6.0.jar velocidad.clj ;;importamos la librería java.util.Scanner ( import '(java.util Scanner)) ( def scan (Scanner. *in*)) ;;solicitamos distancia y tiempo, usamos .nextFloat ( println "Introduce distancia: ") ( def distancia (.nextFloat scan)) ( println "Introduce tiempo: ") (def tiempo (.nextFloat scan)) ;;visualizamos  datos ( println "Distancia leida: "distancia) ( println "Tiempo leido: "tiempo) ;;calculamos la velocidad ( println "Velocidad obtenida: "(/ distancia tiempo

Prueba IronPython en tu navegador

Para quienes usan la plataforma .Net y quieren probar un poco del lenguaje Python sin necesidad de instalarlo. Si usas Linux Ubuntu es necesario tener instalado pipeligh t. Pasos para instalarlo: http://blog.desdelinux.net/pipelight-visualiza-contenido-silverlight-nativamente-en-tu-navegador/ Probar http://ironpython.net/try/

Aprender a programar con Python

Navegando por la web encontré un videotutorial en youtube que tiene el objetivo de enseñar a programar a los niños usando en lenguaje de programación Python . Muy recomendable.

Un vistazo a Python

Creador del lenguaje: Guido van Rossum Paradima: Multiparadigma Año de salida: 1991 Python es un lenguaje sencillo de aprender comparado con lenguajes como Java y/o C/C++ .  Este lenguaje permite usar el paradigma funcional, orientado a objetos, etc. Tiene una gran cantidad de librerías, módulos, etc. que nos ofrecen muchas funciones útiles para el desarrollo de interfaces gráficas, cálculos numéricos, estadísticos, probabilísticos, redes neuronales y hasta video juegos (pygame). En este post se utilizará Linux , por lo general ya viene preinstalado, comencemos abriendo una terminal y escribimos: root@localhost# python Con esto entramos al REPL o shell de Python. Escribimos: >>> import this #dar Enter Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. ... ... Namespaces are one honking great idea -- let's do more of those! Lo que muestra es la filosofía o Zen del lenguaje. Podemos realizar operaciones aritmé

Clojure y los lenguajes extraños

Clojure es un lenguaje bastante complejo (a mi parecer),  olvida todo lo aprendido en lenguajes como C, en Clojure crear un bucle o una condición es muy distinto. Estructuras de control Secuencial Selectiva Repetitiva 1. Secuencial Es la más básica.Consiste en escribir las sentencias de arriba hacia abajo. (comment Esto es un comentario multilínea ) ( println "Hola usuario") 2. Selectiva. Consiste en elegir caminos de acción mediante condiciones falsas y/o verdaderas. puts("Tu nombre") gets nombre si "Ernesto"==nombre  entonces :   "Eres Ernesto" otro:   "No eres Ernesto" En código Clojure sería: ( import '(java.util Scanner)) ( def scan (Scanner. *in*)) ( println "Tu nombre: ") ( def nombre (.nextLine scan)) ( def resultado( if (="Ernesto" nombre) "Eres Ernesto" "No eres Ernesto")) ( println resultado) 3. Repetitiva Consiste en controlar el número d

NiconNotifyOSD, librería para crear notificaciones en aplicaciones Java

Navegando por Internet hallé esto  http://niconsystem.wordpress.com/productos-y-servicios/niconnotifyosd/ Se trata de una librería que nos permite hacer uso de cuadros de diálogo muy al estilo de JOptionPane de Java Swing. Tiene 7 diferentes tipos de notificaciones, por ejemplo, el clásico cuadro de diálogo para introducir texto, entre otros más. Al parecer no está liberada la librería de manera estable, pero se puede usar en pruebas.

Counterclockwise: Un IDE para Clojure

Counterclockwise es un IDE (Eclipse) para desarrollar aplicaciones en Clojure . Para instalarlo debes ir al menú Help -> Install new software, pegar este link  http://updatesite.ccw-ide.org/stable  y dar Enter. Debe aparecer el plugin de Clojure y aceptar.  Puedes ver otras alternativas para programar en este link  http://dev.clojure.org/display/doc/Clojure+Tools Links http://doc.ccw-ide.org/documentation.html

Una introducción a Clojure

Clojure es un lenguaje de programación funcional que corre bajo la JVM, se considera un dialecto de Lisp. Este lenguaje sigue el paradigma de la programación funcional , el cual que trata la computación como la evaluación de funciones matemáticas y evita cambiar el estado y los datos mutables. La programación funcional se enfoca en la inmutabilidad, las funciones puras y la composición de funciones para crear software robusto y mantenible. ¿Cómo ejecuto un programa en Clojure (desde la terminal de comandos)? java -jar clojure_version.jar Programa.cjl La extensión del archivo es *.clj ¿Cómo quedaría el "hola mundo" en Clojure? Creamos un archivo llamado holamundo.clj escribimos lo siguiente: ;; esto es un comentario ( println "hola mundo!") Lo ejecutamos: java -jar clojure_version.jar holamundo.clj Tenemos nuestro primer script en este lenguaje. REPL (Read Eval Print Loop) en Clo j ure Para entrar al REPL debes teclear: java -ja