Demostración comentada del Teorema Fundamental de la Aritmética en Agda

El profesor Brent Yorgey publica una demostración completa, desarrollada desde cero, del Teorema Fundamental de la Aritmética en el asistente de pruebas Agda. El recurso está pensado como material didáctico de nivel intermedio para personas que ya conocen los fundamentos de Agda y la correspondencia

Orden de evaluación y no terminación en lenguajes de consulta

En una charla reciente en FLOPS, el autor presentó λFS (lambda finite set), un modelo que combina programación funcional con programación relacional al estilo de Datalog y SQL, además de álgebra tensorial. En λFS, una relación se modela como una función finita representada internamente como una tabl

Prism: un lenguaje funcional impuro con efectos tipados

Prism es un compilador funcional de prueba de concepto desarrollado por Stephen Diehl durante los últimos tres años. Su propuesta central consiste en modelar los efectos computacionales —mutación, excepciones, generadores, entrada/salida— dentro del sistema de tipos, de modo que el programador decla

Pure Effect: lógica de negocio sin I/O, depurable sin infraestructura

Pure Effect es una biblioteca de JavaScript y TypeScript sin dependencias externas que separa la lógica de negocio de las operaciones de entrada y salida (I/O). En lugar de ejecutar llamadas a bases de datos o servicios externos directamente, el código devuelve objetos planos que describen qué opera

Rhombus 1.0: un nuevo lenguaje de programación extensible sobre Racket

Rhombus es un lenguaje de programación de propósito general, funcional, dinámico y extensible que acaba de alcanzar su versión 1.0. Está construido sobre Racket, del que hereda herramientas como el entorno DrRacket y la suite de línea de comandos raco, y se activa simplemente iniciando un módulo con

Un libro interactivo de OCaml que se ejecuta en el navegador

Un docente ha desarrollado un curso completo de programación funcional con OCaml, titulado “Functional Programming with OCaml”, para la plataforma MOOC NPTEL. Lo singular del material es su formato: no es un PDF ni un sitio web con listados de código que copiar en otro entorno, sino una obra web don

Una charla con un niño de seis años sobre programación funcional

¿Cómo se explica un concepto avanzado de informática a un niño de seis años? Este ensayo, escrito en primera persona por un académico vinculado a la programación funcional, narra una conversación espontánea con su hijo menor mientras leía la tesis de habilitación de Janis Voigtländer sobre teoremas

Deconstruyendo Datalog: lógica y funciones unidas en Datafun

El investigador Michael Arntzenius (conocido como mietek) publicó en septiembre de 2022 su tesis doctoral «Deconstructing Datalog», donde explora la fusión de Datalog —un lenguaje de programación lógica de los años 80 que extiende el álgebra relacional con consultas recursivas— con la programación f

Una introducción amable a los combinadores Y y Z sin let ni recursión

Este artículo propone un recorrido didáctico por los combinadores Y y Z a partir de un acertijo en JavaScript: implementar el factorial de un número sin usar bucles, recursión ni declaraciones como let, const o function. El texto utiliza esta restricción aparentemente artificial como motor pedagógic

CQL: un lenguaje open source de teoría de categorías para datos

CQL (Categorical Query Language) es un lenguaje de programación funcional de código abierto y su entorno integrado de desarrollo (IDE) que aplica la teoría de categorías —una rama de las matemáticas que ha transformado varias áreas de la informática— a tareas de datos como consultas, combinación, mi

Phel 0.36.0 introduce variables como valores de primera clase

Phel 0.36.0 es una versión mayor del lenguaje de programación funcional que compila a PHP, introduciendo capacidades fundamentales que amplían significativamente su poder expresivo. Entre las adiciones más relevantes se encuentran lasfirst-classVars, que permiten tratar las variables como valores de

Jubbly: Nuevo enfoque para asignar valores en programación

El proyecto 'Jubbly' explora una idea innovadora en diseño de lenguajes de programación, enfocada en simplificar y mejorar la forma en que se realizan las reasignaciones de valores, especialmente en estructuras de datos complejas. Tradicionalmente, en muchos lenguajes, asignar un nuevo valor a una v

orígenes del código: los 'ur-lenguajes' revelados

Este artículo explora un concepto fundamental en el desarrollo de software: los "ur-lenguajes" (lenguajes ancestrales). La idea central es que, aunque existen miles de lenguajes de programación, muchos comparten patrones básicos de construcción y organización, agrupándose en familias o "ur-lenguajes

FSet: Nuevo enfoque modulariza Common Lisp

## Modern Common Lisp with FSet: Un Enfoque Innovador para la Gestión de Dependencias y el Desarrollo Modular **1. Introducción: ¿Qué es FSet y por qué es importante?** Common Lisp es un lenguaje de programación poderoso y versátil, pero históricamente ha carecido de un sistema robusto y estandari

Clojure: del código a la infraestructura de Nubank

El documental "Documental" explora la historia de Clojure, un lenguaje de programación funcional que ha evolucionado desde una idea inicial hasta convertirse en la base de la infraestructura de ingeniería de Nubank, uno de los mayores bancos digitales independientes del mundo. Clojure no es un lengu

Scheme: repositorio desacoplado para datos

Este artículo presenta un enfoque innovador para la capa de datos en proyectos Scheme, buscando resolver un problema común: el acoplamiento estrecho entre la capa de control y la implementación específica de la base de datos (en este caso, SQLite). El autor, proveniente de un background en lenguajes

Rust: Maximiza el potencial con menos esfuerzo

El autor ha estado buscando el lenguaje de programación perfecto durante años, frustrado por las limitaciones de opciones populares como F#, TypeScript y C#. Si bien Rust ofrece un gran potencial, su curva de aprendizaje y complejidad (relacionada con la gestión de memoria y el sistema de tipos) han

Elm y la Z-Machine: una combinación inusual

Este artículo del blog de Whitebeard explora la creación de una máquina Z (Z-Machine) en Elm, un lenguaje de programación funcional puro. La Z-Machine, inventada por Infocom en los años 80, era una máquina virtual diseñada para permitir que sus aventuras de texto se ejecutaran en múltiples arquitect

K: Eliminan 'raze' para optimizar código

Este artículo explora una optimización interesante en el lenguaje de programación K, específicamente relacionada con la eliminación de una técnica llamada 'raze'. K es un lenguaje de programación de matriz (array language) conocido por su concisión y expresividad. El problema que aborda el autor, Ch

aprende a usar ⍋⍋: la función inesperada de APL

Este artículo explora el significado y la utilidad de la función ⍋⍋ en el lenguaje de programación APL, un tema que inicialmente parecía carecer de sentido según Paul Mansour. Aunque inicialmente se considera inútil (equivalente a una versión más lenta de otra función), el artículo revela una aplica

memo: Programa con fluidez y experimenta

## memo: Un Entorno de Programación Fluido y Experimental memo es un entorno de programación inusual, descrito como un "entorno de codificación de flujo de conciencia". En esencia, se trata de un lenguaje de programación experimental que prioriza la continuidad y la espontaneidad sobre la estructur

Haskell: Usa `do` para registros más claros

Este artículo del blog de HaskellForAll aborda una recomendación de estilo para la construcción de registros (tipos de datos) en Haskell: priorizar la notación `do` sobre los operadores `Applicative` (como `<$>` y `<*>`). Aunque ambos métodos son válidos, la notación `do` ofrece ventajas significati

Ocaml mejora interoperabilidad con C++

Este cambio introduce un nuevo backend en C++ para el compilador `ocamlc`, mejorando significativamente la integración con código C existente y la interoperabilidad a través de la Foreign Function Interface (FFI). Tradicionalmente, `ocamlc` utilizaba un C intermedio para la FFI, lo que resultaba en

TinyAPL: Combinadores impulsan la programación funcional

## Combinadores en TinyAPL: Funciones que Transforman la Programación Funcional ¿Qué son y por qué son importantes? En el mundo de la programación funcional, los combinadores son una herramienta poderosa y a menudo sutil. En esencia, un combinador es una función que *no modifica* sus argumentos o

Error en compilador Rust al emular tipos avanzados

Este artículo técnico explora una peculiaridad en el sistema de tipos de Rust y cómo un intento de emular tipos de orden superior (HKTs) llevó a un error de desbordamiento en la evaluación de requisitos de traits, causando que el compilador fallara. El autor, en su intento de crear un lenguaje de sc

Tipos y errores: un análisis de Map.take! en Elixir

Este artículo explora las limitaciones de los sistemas de tipos en lenguajes de programación dinámicos, utilizando como ejemplo la propuesta de una función `Map.take!/2` en Elixir. `Map.take/2` es una función existente en Elixir que extrae un subconjunto de claves de un mapa, ignorando las claves in

Recursión: A veces, la solución es recursiva

Este artículo explora una idea contraintuitiva en programación: a veces, la mejor solución para un problema recursivo es, precisamente, una solución recursiva. La premisa central es que, aunque teóricamente cualquier función recursiva puede convertirse en una iterativa, esta transformación a menudo

Matemáticas en Python: Descifrando los 'thinnings'

Este artículo explora el concepto de "thinnings", una herramienta matemática que, aunque a menudo vista como compleja en contextos como la teoría de tipos dependientes, puede ser aplicada y comprendida en lenguajes de programación más comunes como Python. En esencia, un thinning es una forma de test

Recursión sin pila: técnica para código más robusto

Este artículo del blog explora una técnica para transformar código recursivo, a menudo elegante y mantenible, en una forma imperativa más robusta, especialmente útil en entornos como Node.js y TypeScript donde los desbordamientos de pila son una preocupación. La idea central es simular explícitament

C++ se inspira en Lisp: nueva herramienta de programación

El proyecto `lmp` (Lisp-style Meta Programming) de Mistivia en GitHub introduce una forma innovadora de realizar programación meta (template metaprogramming) en C++ que se inspira en el paradigma funcional de Lisp. La programación meta en C++ permite escribir código que genera o manipula otro código

Nix evita errores de pila con nueva técnica

Nix, un lenguaje de gestión de paquetes y construcción, a menudo se enfrenta a limitaciones de profundidad de pila debido a su naturaleza recursiva. Cuando se ejecutan operaciones iterativas (simuladas a través de recursión), el evaluador de Nix puede alcanzar un límite de 10.000 niveles de llamada,

Scala: Concurrencia optimizada con técnica inspirada en Haskell

Este artículo explora una técnica avanzada para mejorar la concurrencia en Scala, inspirada en el lenguaje Haskell y su biblioteca Haxl. El problema que aborda es cómo optimizar la ejecución de múltiples consultas de datos, evitando una serie de llamadas secuenciales a la base de datos. En Haskell,

Aprende Clojure: Plataforma práctica para desarrolladores

ClojureStream es una plataforma integral diseñada para el aprendizaje y la comunidad en torno a los lenguajes de programación Clojure, ClojureScript y Datalog. En un mundo donde la curva de aprendizaje de nuevas tecnologías puede ser empinada, ClojureStream se presenta como un recurso estructurado y

Scheme y 'GOTO': Emulación con Continuaciones

Este artículo explora cómo emular la instrucción `GOTO` en el lenguaje Scheme utilizando continuaciones. `GOTO` es una instrucción de control de flujo que permite saltar a una línea específica de código, algo que Scheme, por diseño, no ofrece directamente. Dijkstra, en su famoso artículo, criticó `G

Rust: Diseña con Tipos, Evita Validaciones

Este artículo, originalmente escrito en Haskell y ahora adaptado a Rust, introduce un patrón de diseño llamado "Parse, don't Validate" y el diseño impulsado por tipos (Type-Driven Design). La idea central es evitar funciones de validación explícitas y, en su lugar, codificar las restricciones y gara

Mini-lenguajes: programación en código reducido

Este artículo de Taylor Troesh explora el fascinante mundo de los "Lil' Fun Langs", o lenguajes de programación muy pequeños. La idea central es que es posible crear lenguajes de programación funcionales y con tipado estático con una cantidad sorprendentemente baja de código. El artículo no solo pre

Diseño con Tipos: Analiza, No Valides

El artículo explora el concepto de diseño impulsado por tipos (type-driven design), una metodología que el autor ha tenido dificultades para explicar de manera concisa. La clave para comprender este enfoque reside en la idea de "parse, don't validate". El autor ilustra esto a través de ejemplos en H

Programación Funcional: El Peligro de la Confianza Excesiva

El artículo de Ian Duncan critica la tendencia en la programación funcional (FP) a enfocarse excesivamente en la corrección local del código, lo que lleva a una falsa confianza en las propiedades del sistema en su conjunto. Argumenta que, independientemente del paradigma de programación, los desarro

Swift y Kotlin: ¿Demasiada Estricción en la Programación?

El artículo del blog 'The Clean Code' explora una tendencia preocupante en el desarrollo de lenguajes de programación modernos, específicamente Swift y Kotlin. Ambos lenguajes, aunque con orígenes distintos (Swift derivado de Objective-C y Kotlin de Java), comparten una marcada inclinación hacia la

SimCity en Texto: Un Juego Único en Emacs

ElCity es un juego de construcción de ciudades por turnos, único porque se ejecuta completamente dentro del editor de texto Emacs. Imagina un SimCity, pero en lugar de gráficos complejos, utilizas caracteres ASCII para representar edificios, carreteras y otros elementos. Esto no es solo una curiosid