Investigué, bajé tutoriales, libros, leí código… en fin, lo usual para cuando uno debe aprender solo. Qué es lo que me quedó de la última semana?
Muy simple. Me leí el R5RS en un día, y lo mejor es que se entiende.
Muy áspero. Me llevó varios intentos implementar una función map() por mi cuenta. Fortalece el carácter
Muy abandonado a su suerte. Carencia de librerías fundamentales para que sea un lenguaje mainstream. Todo está para ser implementado. Por suerte hay gente que se dedica a implementar cosas. Por ejemplo, la maravillosa librería SSAX.
Muy prometedor. Tiene un potencial increíble. Lástima que sea tan … Scheme
Los seguiré manteniendo al tanto de mis “descubrimientos”.
Para hacerlo corto, metaclases son “clases de clases”. En los lenguajes orientados a objetos, en donde las clases también pueden ser manipuladas como “objetos”, lo que actúa como plantilla de las mismas son las metaclases. Si desean leer más sobre el tema, en está plagado de artículos en otros lados que les darán una mejor idea de lo que yo puedo darles en éste momento.
Desde Python 2.2 el sistema de metaclases se ha mejorado mucho. Pero vamos a comenzar con algo simple.
Hagamos una función que retorne una clase. La función recibirá los componentes de la clase (atributos y métodos) en un diccionario. Leer el resto de esta entrada »
PD: Si se preguntan quién es el capo éste que nos regala su derroche de talento de manera tan generosa, se llama Ken Matsudaira, es actor, cantante y muy famoso en su tierra. Más data por supuesto en Wikipedia. Y como es lógico, esta canción fué un hitazo cuando salió allá por el 2004 y quedó en los rankings por casi un año. Un ejemplo a copiar.
Esto es una serie de pensamientos que me llegaron a la cabeza al leer éste ensayo sobre las fallas de Haskell.
Vamos a comenzar de a poco:
“The fact that Perl, Python and Ruby have become popular while Haskell has stayed a marginal language is a failure of the Haskell community. The Haskell community has failed to build a useful distribution Haskell, and it has failed to position the language as something that people can use to solve their problems.”
Así que a todos aquellos que se dedican a transformar el caos de datos, redirigir numeritos y hacer de las computadoras algo más que electrodomésticos, felicitaciones, ánimo y que la Fuerza de Turing y Church los acompañen.
Como dijo McCarthy , LISP es un óptimo local en el espacio entre los lenguajes actuales, pero no por éso vamos a despreciar un lenguaje como Python. Más cuando están implementando de a poco tantas herramientas de lenguajes funcionales .
En Python 2.5 existe la librería functools, que permite trabajar con Funciones de Alto Orden y Aplicación Parcial, o lo que es lo mismo, hacer currying.
Acá les voy a mostrar un pequeño ejemplo de lo divertido y útil que puede ser el currying creando wrappers para funciones.
import functools
def log (message, who):
"Escribe el mensaje proveniente de del objeto 'who' "
print '%s: %s' % (who, message)
def make_logger(an_object):
"Crea un logger específico utilizando la representación en cadena de un objeto "
return functools.partial (log, who=str(an_object))
class Un_Objeto:
"Un objeto cualquiera"
nombre = 'UnObjeto'
mi_logger = None
def __str__(self):
return str(self.nombre)
def __init__(self):
self.mi_logger = make_logger(self)
def decir_hola:
mi_logger(' Dice hola!')
Lo que hacemos con esto es definir una función “envoltorio” make_logger que devuleve una función log con uno de sus parámetros ya seteados. De esta manera podemos almacenar esa función como un miembro de nuestro objeto, y poder llamarlo siempre sin necesidad de de declararle a la función log quién la está llamando.
Aunque (por fortuna para aquellos que no tienen Python 2.5) un ejemplo como éste puede escribirse utilizando expresiones lambda de la siguiente manera:
La idea de ésto es transformar funciones de muchos parámetros en funciones con menos parámetros para simplificarnos la vida y tener soluciones más elegantes.