Adrianistán

El blog de Adrián Arroyo


Artículos con etiqueta «prolog»

Curva de Hilbert en Prolog

La curva de Hilbert es una curva fractal descubierta por David Hilbert en 1891. Es un tipo de curva de Peano. Estas curvas tienen la peculiaridad de que cubren todo el plano de forma continua. Esto les otorga propiedades muy interesantes, una curva de Hilbert de nivel N es la aproximación enésima al límite de la curva, ocupando el mismo espacio pero cada vez rellenando más huecos, así hasta el infinito, donde sería un cuadrado sólido. El objetivo de este post no es entrar en detalle de sus propiedades matemáticas ni de sus aplicaciones, sino como podemos generar curvas de Hilbert bonitas usando Prolog.

Seguir leyendo

Vídeo de mi charla de Strand

Hace unos días di una charla hablando de Strand, un lenguaje de programación del paradigma lógico y que actualmente está en desuso y muy poca gente conoce. El motivo de la charla fue revisar la historia de este lenguaje y cómo consigue que podamos escribir programas paralelos sin apenas darnos cuenta, ya que no incluye ninguna sentencia de fork/spawn o similar. Espero que os guste.

Seguir leyendo

Scryer Prolog Meetup 2023 Notes (day 2)

This is a continuation of the previous post. In this post, we'll see the talks that happened on day 2.

Seguir leyendo

Scryer Prolog Meetup 2023 Notes

The 9th and 10th of November was the Scryer Prolog Meetup 2023 in Düsseldorf. As a Scryer Prolog user and contributor, I was very excited to go to this meeting. Now, I'm back at home and I can write here a report of what happened in this event with the notes I've taken.

Seguir leyendo

Strand, un lenguaje extremadamente paralelo

Strand es un lenguaje de programación lógico diseñado en 1988 por Ian Foster y Stephen Taylor. Se trata de un lenguaje diseñado desde para ser extremadamente paralelo. El lenguaje no tuvo mucho éxito, su página de Wikipedia en inglés es enana y muy poca gente lo conoce. No obstante, los autores de Strand llegaron a publicar un libro, Strand: New concepts in Parallel Programming. Además, gracias al trabajo de Felix L. Winkelmann, existe una implementación open source de Strand. En este post veremos algunos conceptos fundamentales de Strand.

Seguir leyendo

El camino a Prolog: parser y juntarlo todo (parte III)

Ya tenemos un sistema que es capaz de probar cosas mediante backtracking interactivo pero no podemos pasarle ficheros ni escribir queries de forma normal. Lo primero que tendremos que hacer será un parser de la sintaxis de Prolog a nuestras estructuras de datos y después lo juntaremos todo en un programa ejecutable. Veremos como resolver el problema de la cebra.

Seguir leyendo

El camino a Prolog: obtener soluciones y no determinismo (parte II)

En el artículo anterior dejamos un algoritmo de unificación escrito en Rust. Ahora, y siguiendo también el libro de Peter Norvig, debemos implementar algo que pruebe las reglas que tenemos definidas para la query que insertemos.

Seguir leyendo

El camino a Prolog: unificación (parte I)

Ho, ho, ho. Durante estos días festivos de Navidad voy a escribir unos posts de una serie llamada El camino a Prolog donde vamos a tratar de construir un sistema Prolog de juguete. Mi intención no es construir un sistema Prolog real y usable, sino un sistema de juguete para que se pueda entender como funcionan por debajo muchas cosas. Esto me ayudará a mí a entender mejor como funcionan sistemas como Scryer Prolog por debajo. Sin más dilación empecemos con la primera parte.

Seguir leyendo

Optimizar una mudanza (o un proyecto de software) en Prolog

Seguimos viendo aplicaciones puzzles en Prolog, ayudándonos de clpz y hoy nos toca uno con multitud de aplicaciones prácticas. El problema de la mudanza consiste en que hay que mover unas piezas de mobiliario (tareas). Algunas de estas necesitan varias personas para poder moverse y se tarda un tiempo en moverlas. Además, hay algunos muebles que tienen que moverse antes que otros debido a su disposición en la casa. Si sois 4 amigos, ¿cuál es el tiempo mínimo que podéis tardar en mover todo?

Seguir leyendo

Comando wc en Prolog

Existe un programa dentro de los sistemas Unix llamado wc. Son las iniciales de "word counter". Este programa en cuestión toma un fichero de texto y cuenta líneas, palabras y bytes/caracteres. Vamos a intentar hacer un programa similar pero en Prolog, buscando la pureza, no la velocidad.

Seguir leyendo