Introduction à Swish Prolog

Dans ce TP vous allez explorer la partie de Prolog vue en cours (correspondant à Datalog) à travers l'interpréteur Prolog en ligne swish Prolog.

Exercice 1

On considère la base de faits suivante

fonctionnel(ocaml).
fonctionnel(scheme).
fonctionnel(rust).
imperatif(c).
imperatif(rust).
objet(java).
objet(rust).
objet(ocaml).
declaratif(prolog).
hello(world).
  1. Écrivez une règle qui exprime le fait que tout langage fonctionnel est aussi un langage déclaratif.
  2. Écrivez un programme et une requête qui renvoie tous les langages (sans les lister, mais on pourra "lister" les paradigmes).
  3. Écrivez un programme et une requête dont les solutions sont tous les langages multi-paradigmes (ayant au moins deux paradigmes parmi les trois possibilités suivantes: "fonctionnel", "impératif", "objet", on omet le paradigme "déclaratif" et la règle de la question 1).
  4. Proposez une autre modélisation de cette base de faits à l'aide d'une relation binaire paradigme/2, et refaites les questions 1 à 3.

Exercice 2

On suppose donnée une base de faits concernant une relation binaire child_of/2.

  1. Écrivez une requête qui renvoie les deux parents d' alice.
  2. Écrivez une requête qui renvoie les enfants qu' alice a eu avec bob.
  3. Écrivez une requête qui renvoie les (demi) frères et soeurs d'alice (qui ont au moins un parent en commun avec alice)
  4. Écrivez une requête qui renvoie les frères et soeurs d'alice (pas de demi-frère ni demi-soeur, et alice n'est pas sa propre soeur, pensez à la coupure pour exprimer "différent")
  5. Écrivez une requête qui renvoie les ancêtres d'alice. Optimisez votre requête pour ne pas faire de calculs inutiles.

Corrigé

Disponible ici