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).
- Écrivez une règle qui exprime le fait que tout langage fonctionnel est aussi un langage déclaratif.
- Écrivez un programme et une requête qui renvoie tous les langages (sans les lister, mais on pourra "lister" les paradigmes).
- É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).
- 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
.
- Écrivez une requête qui renvoie les deux parents d'
alice
. - Écrivez une requête qui renvoie les enfants qu'
alice
a eu avecbob
. - Écrivez une requête qui renvoie les (demi) frères et soeurs d'
alice
(qui ont au moins un parent en commun avecalice
) - Écrivez une requête qui renvoie les frères et soeurs d'
alice
(pas de demi-frère ni demi-soeur, etalice
n'est pas sa propre soeur, pensez à la coupure pour exprimer "différent") - Écrivez une requête qui renvoie les ancêtres d'
alice
. Optimisez votre requête pour ne pas faire de calculs inutiles.