Title: TD 3 Prolog
1TD 3 Prolog
- Ecrire un prédicat factorielle et une version
avec accumulateur de factorielle. - Ecrire un prédicat sommeliste qui calcule la
somme des termes d une liste d entiers. Ecrivez
une version avec accumulateur. - Réalisez l opération de fusion de 2 listes
triées par ordre croissant. ( ex fusionner
2,5,5 et 1,3,4,9 donne 1,2,3,4,5,5,9). - Ecrire un programme prolog qui compte le nombre
de caractères a et b dans un fichier
texte et affiche le résultat à l écran
2Statistiques sur un fichier
- Exemple d utilisation ? countab( t.txt ).3
a et 25 b ? countab( nofile.zzz ).Erreur
entree/sortie - On utilisera les predicats open/3, close/1,
get_char/2 write(term), nl/0, la variable
end_of_file et enfin catch/3 dont la syntaxe
précise se trouve dans l aide de SWI Prolog.
3La coupure
- 1. Donner toutes les réponses à des questions a-j
posées avec des inconnues. Dessiner l'arbre de
preuve Prolog si nécessaire. ( a(Z)? Puis b(Z)?
Puis c(Z) .. J(Z)? )
d(X) -baseColor(X),color(X).d(8).e(X,Y)-
baseColor(X),color(Y).e(8,8).f(X,Y)-
baseColor(X),color(Y), !.f(8,8).g(X,Y)-
baseColor(X),!,color(Y).g(8,8).h(X,Y)-
color(Y),!,baseColor(X).h(8,8).i(X) -
color(X),!,baseColor(X).i(8).j(X) -
color(orange),!,Xorange.j(8).
baseColor(red).baseColor(blue).baseColor(yellow)
.color(green).color(blue).a(X) -
baseColor(X).a(8).b(X) - baseColor(X),!.b(8).
c(X) - !, baseColor(X).c(8).
4- 2. Expliquer (ou spécifier clairement) les
prédicats mystery1 et mystery2.mystery1(X,
XXs, Xs).mystery1(X, YYs, YZs)
-mystery1(X, Ys, Zs).mystery2(X, XXs, Xs)
- !.mystery2(X, YYs, YZs) -mystery2(X,
Ys, Zs).
5- 3. Soit la négation par échec réalisée par le
prédicat not/1. Comment fonctionne l'opération
not(owns(Ls,X)) selon que X et Ls sont libres ou
instanciés ? (l'arbre risquant d'être infini, que
répond Prolog ? Les inconnues prennent -elles des
valeurs ?)