Lab Prolog : programmation logique avec faits, règles et questions, dans le navigateur

Ce lab donne à chaque élève un interpréteur Prolog à lui, avec trois petits fichiers à lire et à modifier : un fichier de faits sur une famille, un fichier de règles construites dessus et un fichier de règles sur les listes. Un programme Prolog ne dit pas quoi faire pas à pas. Il dit ce qui est vrai, et l’exécuter revient à poser une question.

Ce n’est pas un lab d’attaque. Chaque copie n’a aucune route vers internet ni vers un autre élève : rien ne peut y être téléchargé et rien de ce qui s’y trouve ne peut atteindre quelqu’un d’autre. C’est uniquement l’interpréteur standard : aucun paquet supplémentaire ne peut être installé, et ce n’est ni un solveur de contraintes, ni un serveur web, ni une base de données.

Ce que les élèves apprennent

Qu’un programme peut être un ensemble de faits et de règles, et qu’une question est la façon de l’exécuter. Les élèves lisent les faits, demandent si quelque chose est vrai, utilisent une variable pour demander qui, lisent une règle construite à partir de deux autres affirmations, et suivent une règle qui s’appelle elle-même pour trouver tous les ancêtres. Ils découvrent aussi qu’une absence de sortie veut dire que la réponse ne se montre pas à partir des faits écrits, et non que le programme est cassé. Ce lab convient à une introduction aux paradigmes de programmation et à la logique en informatique ; vérifiez le libellé exact dans l’unité de votre propre organisme, aucun n’est cité ici.

Le lancer dans votre navigateur

Le lab démarre un service, prolog, à partir de l’image officielle swipl, sous un compte sans privilèges. Il n’y a pas de page web : la barre du lab n’a donc aucun lien sous « Dans votre navigateur », et c’est le terminal qui sert à poser les questions. Il atteint l’interpréteur avec docker exec prolog, suivi de swipl et de la question. Chaque commande de la leçon charge un fichier, pose une question avec l’option -g et s’arrête avec -t halt : elle finit donc toujours. Les réponses sont les mêmes à chaque fois, dans l’ordre où les faits sont écrits. Tout ce qui s’affiche est en anglais, quelle que soit la langue de la page.

Pour discuter avec l’interpréteur, appuyez sur « Ouvrir le terminal » et tapez docker exec -it prolog swipl -q family.pl. À l’invite ?- tapez une question qui se termine par un point, comme parent(tom, X). Il affiche X = ann, et un point-virgule demande la réponse suivante. Tapez halt. pour quitter.

  1. Ouvrir la page Conteneur. Ouvrez « Créer » dans la barre et choisissez « Lancer un conteneur ». Tout le monde peut ouvrir la page, et le lab Git et le lab SQL se lancent sans compte. Tous les autres labs demandent un compte gratuit : créez-en un, connectez-vous, puis appuyez sur « Démarrer ».
  2. Trouver le lab. La carte « Laboratoires d’exemple » liste tous les exemples. Trouvez Prolog : faits, règles et questions.
  3. Appuyer sur Démarrer. « Démarrer » le lance tel quel, en un clic. « Modifier le fichier d’abord » ouvre le fichier compose pour que vous puissiez le changer avant de démarrer.
  4. L’ouvrir. Il n’y a pas de page web à ouvrir. Sur la page du lab, appuyez sur « Ouvrir le terminal » et tapez docker exec prolog swipl -q -g "forall(parent(tom, X), writeln(X))" -t halt facts.pl pour afficher les enfants de tom : ann, puis ben.

Que demander aux élèves de rendre

Les questions qu’ils ont posées et ce que chacune a répondu : une question oui ou non, une question avec une variable, et une qui utilise la règle grandparent ou ancestor. Puis une règle à eux ajoutée à family.pl, par exemple pour une tante ou un cousin, avec la question qui la montre en marche, et une phrase ou deux, dans leurs mots, sur la différence entre un fait et une règle. Rien n’est noté automatiquement : la règle et la phrase montrent si c’était compris. Pour un travail plus poussé, demandez pourquoi une question qui n’affiche rien n’est pas la même chose qu’une affirmation fausse.

Une leçon de base sur ce lab

Prolog Basics est une petite leçon qui se fait dans ce lab. L’élève y lit les faits, demande si quelque chose est vrai, demande qui avec une variable, lit une règle et suit une règle qui s’appelle elle-même.

Un compte personnel gratuit la reçoit dans le module Basics, qui se trouve sur « Accueil », et chaque établissement peut la copier depuis le dossier Basics de la Bibliothèque. Elle est volontairement petite : elle montre à un enseignant ce qu’est une leçon qui se fait dans un lab, et le lab fait le reste. Copiez-la dans un module à vous pour la modifier.

Le code sur GitHub

Le fichier compose n’a pas de Dockerfile : il lance une seule image publique officielle, SWI-Prolog, figée sur la version 9.2.9, sous un compte sans privilèges avec 128 Mo de mémoire. L’image est sous licence BSD-2-Clause et n’est pas distribuée par nous. Le fichier écrit trois petits fichiers d’exercice au premier démarrage et les garde sur un volume : ce que l’élève change est donc encore là après un arrêt et un démarrage. Les limites sont honnêtes : le lab n’a aucune sortie, donc aucun paquet supplémentaire ne peut être installé, et il enseigne l’idée de la programmation logique avec un arbre généalogique, pas les gros programmes pour lesquels Prolog sert.

En faire un travail

Indiquez dans la tâche ce qu’il faut rendre.

  1. Créer le lab. Dans votre module, ajoutez une tâche et choisissez la carte « Lab de conteneurs », puis « Dans un dépôt GitHub ». Indiquez https://github.com/mitsurutech/lab-prolog-lab avec la branche main. Le fichier compose par défaut est compose.yaml. Faites d’abord un fork du dépôt si vous voulez le modifier, par exemple pour d’ajouter d’autres faits aux fichiers de départ.
  2. Publier et l’essayer. « Publier » fige le commit qui vous a été montré : un changement ultérieur dans le dépôt ne modifie donc pas un lab que vous avez déjà proposé. Démarrez d’abord votre propre copie.
  3. Le distribuer. Attribuez-le comme n’importe quelle tâche, avec une échéance si vous le souhaitez, et indiquez dans la tâche ce qu’il faut faire et ce qu’il faut rendre.
  4. Noter ce qui est rendu. Ouvrez la copie d’un élève et le travail rendu, notez-le et renvoyez-le avec un motif s’il demande un complément.

Essayer ce lab, et ce qu’il coûte

Un compte personnel gratuit permet de suivre les leçons de base de ce lab, avec chaque mois assez de crédit gratuit pour suivre la plupart des leçons, sans carte. Pour une classe, un établissement a ses 365 premiers jours gratuits pour 50 élèves au plus, puis paie par élève et par an, tous les labs compris et les enseignants gratuits.

Questions fréquentes

Pourquoi une question n’affiche-t-elle parfois rien ?
Parce que le but a échoué : on ne peut pas montrer qu’il est vrai à partir des faits et des règles écrits. Ce n’est pas une erreur, et ce n’est pas la même chose qu’une affirmation fausse dans la vraie vie. Ajoutez un fait et la même question peut réussir. Un nom inconnu, c’est différent : il affiche une erreur qui dit Unknown procedure.
Pourquoi les noms et les messages restent-ils en anglais sur une page dans une autre langue ?
Les faits, les noms de fichiers et tous les messages de l’interpréteur sont en anglais, et le lab ne les change pas. La leçon le dit et explique chaque réponse dans la langue de la page.
Les modifications des élèves sont-elles conservées ?
Oui, pour cette copie : les fichiers sont sur un volume, ils sont donc encore là quand le lab est arrêté puis redémarré. Un fichier supprimé par l’élève est réécrit, sous sa forme d’origine, au prochain démarrage du lab.