Programación

Mónadas

Mario Román

A monad is just a monoid in the category of endofunctors, what’s the problem?

Philip Walder (apócrifa) en A Brief, Incomplete, and Mostly Wrong History of programming languages

Prerrequisitos

Este artículo requiere un conocimiento previo de Haskell, o al menos, de otro lenguaje de programación funcional. Puedes consultar nuestra introducción a Haskell con recursos para iniciarte en el lenguaje.

Por otro lado, para la segunda parte del artículo es recomendable conocimiento previo sobre teoría de categorías. Aun así, no es necesaria para leer la primera parte del artículo, donde hablamos de mónadas sin hacer ninguna referencia explícita a la teoría de categorías. Si quieres leer sobre ese tema, puedes consultar nuestros apuntes de introducción a teoría de categorías.

Motivación para las mónadas

Mónadas en Haskell

Imaginemos que necesitamos controlar cuando una función interna devuelve un error, o cuando usa un estado que debe ser pasado al resto de funciones. Cuando trabajamos con programación funcional pura, debemos devolver explícitamente el error (señalar cómo va a tratarlo cada función) o pasar el estado como argumento a cada una de las funciones; así que una solución sería modificar cada una de las funciones que usamos para que tenga en cuenta ese estado o ese caso de error, pero esto añadiría mucha complejidad innecesaria a nuestro código. La estructura de mónada simplifica esta escritura.

Seguir leyendo...

Utilidades

Apuntes para el doble grado

Múltiples

Repositorio de apuntes

A iniciativa de los alumnos de segundo, hemos dejado público un repositorio de apuntes colectivo sobre las asignaturas del doble grado:

Puedes descargar los apuntes, todavía en construcción, y con licencia Creative Commons en su página, que estará disponible desde recursos.

Programación

Aprendiendo Emacs

Mario Román

Emacs

Emacs es un editor de texto construido sobre un intérprete del lenguaje Elisp para hacerlo extensible. Cada acción del editor constituye un comando sobre el intérprete, por lo que podemos reescribir sus comandos o crear nuevos comandos simplemente programando sobre el intérprete.

Emacs editando este mismo artículo

Emacs sirve como IDE para la mayoría de lenguajes de programación, como editor para programación literaria y ciencia reproducible; se integra con git y con el sistema de archivos, y tiene extensiones disponibles para usarse como aplicación para organizar listas de tareas, leer el correo o servir como hoja de cálculo.

I use Emacs, which might be thought of as a thermonuclear word processor.

Neal Stephenson, In the Beginning… was the command line.

En este artículo haré una referencia breve a todo lo que me ha ido sirviendo para aprender Emacs mientras enlazo a fuentes que tratan cada uno de los temas más extensamente. Como recursos generales para aprender Emacs, puedo recomendar:

  • .Emacs Tutorials de jekor, explican todo lo necesario para aprender Emacs en 10 videotutoriales que pueden seguirse progresivamente.
  • Emacs Meetups de Thoughtbot, que profundizan sobre temas concretos de uso de Emacs.
  • Emacs Rocks, vídeos breves sobre casos concretos de uso de Emacs.
  • Emacs wiki, una wiki que documenta todo lo relacionado con Emacs.
  • sachachua.com, donde se hace referencia periódicamente a noticias de Emacs, y tiene escritas hojas de referencia de atajos de teclado de Emacs.
  • C’est la z, otro blog en el que se tratan temas relacionados con Emacs.
  • GNU Emacs, la documentación oficial de Emacs.
  • El baúl del programador ha empeazado una recopilación colaborativa de los comandos y paquetes más útiles para Emacs.

Seguir leyendo...

Análisis

Apuntes de introducción al cálculo

Ignacio Cordón

Presentamos el código fuente de un libro completo de Cálculo escrito por D. Francisco Javier Pérez González, profesor del departamento de Análisis Matemático de la Universidad de Granada, que sirve como una maravillosa introducción al Análisis y al razonamiento matemático. Los apuntes están escritos en Latex y licenciados en Creative Commons BY-NC-SA.

Queremos agradecérselos a D. Javier Pérez, que nos proporcionó el código de sus apuntes para que pudiésemos publicarlo, y que ha ayudado a hacer del conocimiento algo libre y accesible a sus alumnos. En su página web se puede encontrar mucho más material dedicado al análisis matemático, como series de Fourier, variable compleja o análisis en .

Está disponible el libro completo en formato PDF y el código fuente lo alojamos en este repositorio en GitHub.

Álgebra

Teoría de tipos

Mario Román

Los sistemas de tipos tienen su utilidad en las matemáticas. Sirven para modelar una fundamentación de las matemáticas distinta de la usual fundamentación conjuntista; y tienen varias aplicaciones interesantes en lenguajes funcionales y asistentes de demostración. En particular, sobre los tipos se puede definir un álgebra y se pueden representar sistemas lógicos. Vamos a tratar esas aplicaciones referenciando en cada caso artículos donde se exponen en profundidad.

Inducción estructural

La inducción estructural es una generalización de la inducción usual sobre los naturales que la extiende a otras estructuras representables como tipos de un lenguaje funcional. Sobre la inducción estructural hemos escrito previamente en el blog una introducción:

En ese post se escriben ejemplos sobre los naturales y los árboles. El artículo sobre el que se basa es:

Ejemplos y más detalles sobre inducción estructural y sus usos pueden encontrarse en:

Y varias demostraciones por inducción estructural implementadas en Coq en este repositorio sobre recorridos en árboles.

Seguir leyendo...