Laboratorio de Prolog: programación lógica con hechos, reglas y preguntas, en el navegador

Este laboratorio da a cada estudiante un intérprete de Prolog propio, con tres archivos pequeños para leer y cambiar: un archivo de hechos sobre una familia, un archivo de reglas construidas sobre ellos y otro de reglas sobre listas. Un programa Prolog no dice qué hacer paso a paso. Dice qué es verdad, y ejecutarlo es hacer una pregunta.

No es un laboratorio de ataque. Cada copia no tiene ninguna ruta hacia internet ni hacia otro estudiante, así que no se puede descargar nada en ella y nada de lo que hay dentro puede llegar a otra persona. Es solo el intérprete estándar: no se pueden instalar paquetes adicionales, y no es un resolvedor de restricciones, un servidor web ni una base de datos.

Qué aprende el alumnado

Que un programa puede ser un conjunto de hechos y reglas, y que una pregunta es la forma de ejecutarlo. Los estudiantes leen los hechos, preguntan si algo es verdad, usan una variable para preguntar quién, leen una regla construida con otras dos afirmaciones y siguen una regla que se llama a sí misma para encontrar a todos los ascendientes. También descubren que la falta de salida significa que la respuesta no se puede mostrar con los hechos escritos, no que el programa esté roto. Sirve para una introducción a los paradigmas de programación y a la lógica en informática; compruebe en la unidad de su propio organismo la redacción exacta, aquí no se cita ninguna.

Ejecútalo en tu navegador

El laboratorio arranca un servicio, prolog, con la imagen oficial swipl, como una cuenta sin privilegios. No hay página web, así que la barra del laboratorio no tiene enlace bajo En tu navegador, y el terminal es la forma de hacer preguntas. Llega al intérprete con docker exec prolog, seguido de swipl y la pregunta. Cada orden de la lección carga un archivo, hace una pregunta con la opción -g y se detiene con -t halt, así que siempre termina. Las respuestas son iguales cada vez, en el orden en que están escritos los hechos. Todo lo que se imprime está en inglés, sea cual sea el idioma de la página.

Para conversar con el intérprete, pulse Abrir terminal y escriba docker exec -it prolog swipl -q family.pl. En el indicador ?- escriba una pregunta terminada en punto, como parent(tom, X). Imprime X = ann, y un punto y coma pide la respuesta siguiente. Escriba halt. para salir.

  1. Abre la página Contenedor. Abre «Crear» en la barra y elige «Ejecutar un contenedor». Cualquiera puede abrir la página, y el laboratorio de Git y el de SQL se inician sin cuenta. Todos los demás laboratorios necesitan una cuenta gratuita: crea una, inicia sesión y pulsa «Iniciar».
  2. Busca el laboratorio. La tarjeta «Laboratorios de ejemplo» lista todos los ejemplos. Busca Prolog: hechos, reglas y preguntas.
  3. Pulsa «Iniciar». «Iniciar» lo ejecuta tal cual, con una sola pulsación. «Editar el archivo primero» abre el archivo compose para que lo cambies antes de iniciarlo.
  4. Ábrelo. No hay ninguna página web que abrir. En la página del laboratorio pulse Abrir terminal y escriba docker exec prolog swipl -q -g "forall(parent(tom, X), writeln(X))" -t halt facts.pl para imprimir los hijos de tom: ann y luego ben.

Qué pedir que entreguen

Las preguntas que hicieron y lo que respondió cada una: una pregunta de sí o no, una pregunta con una variable y una que use la regla grandparent o ancestor. Después una regla propia añadida a family.pl, por ejemplo para una tía o un primo, con la pregunta que la muestre funcionando, y una o dos frases con sus palabras sobre la diferencia entre un hecho y una regla. Nada se corrige automáticamente: la regla y la frase muestran si se entendió. Para un trabajo más sólido, pregunte por qué una pregunta que no imprime nada no es lo mismo que una afirmación falsa.

Una lección básica en este laboratorio

Prolog Basics es una lección pequeña que se hace en este laboratorio. En ella el estudiante lee los hechos, pregunta si algo es verdad, pregunta quién con una variable, lee una regla y sigue una regla que se llama a sí misma.

Las cuentas personales gratuitas la tienen en el módulo Basics, que está en Inicio, y cada centro puede copiarla desde la carpeta Basics de la Biblioteca. Es pequeña a propósito: muestra a un docente qué es una lección trabajada en un laboratorio, y el laboratorio hace el resto. Cópiala en un módulo tuyo para cambiarla.

El código en GitHub

El archivo compose no tiene Dockerfile: ejecuta una sola imagen pública oficial, SWI-Prolog, fijada en la versión 9.2.9, como una cuenta sin privilegios con 128 MB de memoria. La imagen tiene licencia BSD-2-Clause y no la distribuimos nosotros. El archivo escribe tres archivos didácticos pequeños la primera vez que arranca y los guarda en un volumen, así que lo que el estudiante cambia sigue ahí tras una parada y un arranque. Los límites son honestos: el laboratorio no tiene salida, así que no se pueden instalar paquetes adicionales, y enseña la idea de la programación lógica con un árbol genealógico, no los programas grandes para los que se usa Prolog.

Asignarlo como trabajo

Indica en la tarea qué hay que entregar.

  1. Crea el laboratorio. En tu módulo añade una tarea y elige la tarjeta «Laboratorio de contenedores», y después «En un repositorio de GitHub». Indica https://github.com/mitsurutech/lab-prolog-lab con la rama main. El archivo compose es el predeterminado, compose.yaml. Haz un fork del repositorio antes si quieres modificarlo, por ejemplo para añadir más hechos a los archivos de partida.
  2. Publica y pruébalo. «Publicar» fija el commit que te mostraron, así que un cambio posterior en el repositorio no altera un laboratorio que ya has asignado. Inicia primero tu propia copia.
  3. Asígnalo. Asígnalo como cualquier tarea, con una fecha de entrega si quieres, e indica en la tarea qué hacer y qué entregar.
  4. Califica lo entregado. Abre la copia de un alumno y el trabajo que ha entregado, califícalo y devuélvelo con un motivo si necesita más.

Prueba este laboratorio, y lo que cuesta

Con una cuenta personal gratuita puedes seguir las lecciones básicas de este laboratorio, con crédito gratuito suficiente cada mes para seguir la mayoría de las lecciones y sin tarjeta. Para una clase, un centro tiene gratis sus primeros 365 días, hasta 50 alumnos, y después paga por alumno y año, con todos los laboratorios incluidos y el profesorado gratis.

Preguntas frecuentes

¿Por qué una pregunta a veces no imprime nada?
Porque el objetivo falló: no se puede demostrar que sea verdad con los hechos y reglas escritos. No es un error y no es lo mismo que una afirmación falsa en la vida real. Añada un hecho y la misma pregunta puede tener éxito. Un nombre desconocido es distinto: imprime un error que dice Unknown procedure.
¿Por qué los nombres y los mensajes siguen en inglés en una página en otro idioma?
Los hechos, los nombres de archivo y todos los mensajes del intérprete están en inglés, y el laboratorio no los cambia. La lección lo dice y explica cada respuesta en el idioma de la página.
¿Se conservan los cambios de los estudiantes?
Sí, para esa copia: los archivos están en un volumen, así que siguen ahí cuando el laboratorio se detiene y se vuelve a arrancar. Un archivo que el estudiante borra se escribe de nuevo, en su forma original, la próxima vez que arranca el laboratorio.