• Aucun résultat trouvé

Td corrigé Prolog - TD 1 - Exercices corriges pdf

N/A
N/A
Protected

Academic year: 2022

Partager "Td corrigé Prolog - TD 1 - Exercices corriges pdf"

Copied!
1
0
0

Texte intégral

(1)

Prolog - TD 2

Opérations et récursivité

Expressions Arithmétique

La semaine dernière « TD1 », nous avons vu l'expression Y is X-1. Cette expression est un prédicat particulier qui permet une opération arithmétique. De la même manière, on peut utiliser les opérateurs

+ addition

- soustraction

* multiplication

/ division réelle

// division entière

mod reste de la division entière

** puissance

Attention, Prolog n'est pas capable d'inverser les opérations arithmétiques ! Exemple :

?- Y is 5+2.

Y = 7

?- 7 is X+2.

ERROR: Arguments are not sufficiently instantiated Booléens

A=B cherche à rendre A et B égaux.

o 3=1+2 est No

o X=1+2 est Yes avec X=1+2 (si, si, vous pouvez essayer)

A==B A et B sont-ils identiques ?

o 3==1+2 est No o X==1+2 est No

A=:=B A et B ont-ils la même valeur ?

o 3=:=1+2 est Yes

o X=:=1+2 provoque une erreur

A<B infériorité (numérique)

A=<B infériorité (numérique)

A>B supériorité (numérique)

A=>B supériorité (numérique) Opérateurs logiques

Pour modifier le fonctionnement d'une règle de déduction, on peut employer des opérateurs logiques :

a :- b si b est vrai, alors a est vrai

a :- b,c si b et c sont vrais, alors a est vrai

a :- b;c si b ou c est vrai, alors a est vrai

a :- \+ b si b est faux, alors a est vrai

a :- b -> c;d si b est vrai, si c est vrai, alors a est vrai - de plus, si b est faux, alors si d

est vrai, alors a est vrai

F.AMIROUCHE 1

(2)

Exercices utilisant les opérateurs Parité, imparité

Méthode récursive

Vous allez définir les règles nécessaires pour que la requête

?-pair(X)

réponde Yes lorsque X est pair, No dans le cas contraire et pour que la requête

?-impair(X)

réponde Yes lorsque X est impair, No dans le cas contraire.

Bien entendu, il doit y avoir une manière de faire cela en utilisant des divisions, mais vous allez faire cela en utilisant la récursivité.

1. Écrivez une règle qui précise que 0 est pair.

2. Écrivez une règle qui précise que si X est pair, alors X+2 est pair.

3. Écrivez les règles correspondantes pour les impairs.

4. Votre programme fonctionne-t-il dans le cas des nombres négatifs ? Dans le cas contraire, modifiez-le pour qu'il fonctionne.

Méthode mutuellement récursive

Pour ne pas confondre, nous allons maintenant définir des règles pour les prédicats odd/1 et

even/1. En version sous-titrée, odd = impair et even = pair. Cette fois, nous allons employer la récursivité mutuelle.

1. Écrivez une règle qui précise que 0 est even.

2. La règle suivante précise que si Y est impair, Y+1 est pair even(X) :- Y is X-1, odd(Y).

3. Écrivez une règle qui précise que si Y est pair, alors Y+1 est impair.

4. Votre programme fonctionne-t-il dans le cas des nombres négatifs ? Dans le cas contraire, modifiez-le pour qu'il fonctionne.

Les tours de Hanoi (plus difficile).

Les tours de Hanoi (aussi appelées Tours de Brahma ou Puzzle de la fin de fin du monde) ont été inventées par un mathématicien Français, Edouard Lucas, en 1883. Il a été inspiré par une légende. Dans un temple Hindou, les prêtres reçurent une pile de 64 disques d'or, chacun un peu plus petit que celui d'en-dessous, empilés sur un poteau, et deux poteaux vides. Ils devaient transférer les 64 disques d'un poteau à un autre, avec une seule règle : Un disque ne peut pas être placé sur un autre disque plus petit. La fin du monde arrivera lorsqu’ils finiront leur travail.

Comme je n'ai pas particulièrement l'intention de détruire le monde, nous nous contenterons de N disques avec N<7. Récapitulons les règles :

Le terrain est constitué de trois tours.

N disques de tailles toutes différentes sont empilés sur l'une des tours, par taille décroissante avec le plus grand en bas.

Chaque disque est forcément sur une des trois tours.

Un disque ne peut jamais être posé sur un autre disque plus petit. Par contre, il peut être posé sur un disque plus grand.

Un seul disque peut être déplacé à la fois.

F.AMIROUCHE 2

(3)

Le site http://ilotresor.com/jeux/jeux_hanoi.html vous propose une démonstration. La solution est simple, une fois qu'on l'a trouvée. En attendant, je vous conseille d'utiliser un papier et un stylo pour la chercher.

Pour résoudre ce problème, vous allez devoir définir un prédicat hanoi/4hanoi(N,A,B,C)

signifie "Il est possible de bouger N disques depuis la tour A vers la tour B en s'aidant de la tour C." et A, B et C sont des numéros entre 1 et 3.

Je vous fournis la règle bouge, que vous utiliserez à chaque fois que vous bougez effectivement une tour.

bouge(Depart,Arrivee) :- write('Je déplace un disque de la tour '), write(Depart), write(' à la tour '), write(Arrivee), nl.

1. Que fait la règle bouge ? A quoi sert le prédicat bouge/2 ? 2. Que peut-on dire de hanoi(0,A,B,C) ?

3. Écrivez la règle qui permet de déduire hanoi(N,A,B,C) lorsque N n'est pas 0.

4. Avec cette méthode, combien de mouvements faudra-t-il accomplir pour terminer le jeu ?

Correction du TD 1

%

% Prédicat grandparent/2

%

% X est grandparent de Y s'il existe Z tel que

% X est parent de Z

% et Z est parent de Y

grandparent(X,Y) :- parent(X,Z),parent(Z,Y).

%

% Prédicat frereousoeur/2

%

% X est frereousoeur de Y s'il existe Z tel que

% Z est parent de X

% et Z est parent de Y

frereousoeur(X,Y) :- parent(X,Z),parent(Y,Z).

%

% Prédicat ancetre/2

%

% Premier cas : si X est parent de Y, alors X est ancetre de Y

%

ancetre(X,Y) :- parent(X,Y).

%

% Deuxieme cas : si X est parent d'un ancetre de Y, alors X est aussi un ancetre de Y

%

ancetre(X,Y) :- parent(X,Z),ancetre(Z,Y).

F.AMIROUCHE 3

Références

Documents relatifs

Le prix plancher en dessous duquel la cimenterie ne peut accepter le marché est 39.6 dinars la tonne c’est à dire le coût variable unitaire.. Ces pratiques de pénétration grâce à

2-5 exprimer la valeur efficace U de u(t). Calculer sa valeur numérique. Quel doit être l'appareil utilisé pour mesurer U et sur quel mode ?. 2-6 calculer la fréquence de rotation

Le seul composé de cette formule ayant deux carbones asymétriques comporte un carbone proteur au moins d'un hydrogène, d'un méthyle, et d'un éthyle soit en tout 4 C il ne reste que

b) Après centrifugation en gradient de CsCl, l’acide nucléique natif conduit à l’obtention d’une seule bande correspondant à une densité de 1,77g/cm 3 alors que

Sachant que le but de la société « Duc de Gascogne » est une pénétration rapide du marché, l’entreprise doit opter pour le prix psychologique de 15 euros. En effet, si elle

 La bande passante du support est inférieure à celle d’un seul signal..  Le débit sur le support est inférieur à la bande passante du signal le

h) Déterminer une prévision de la consommation de cigares pour les douze mois de 1976 en multipliant la prévision de la tendance obtenue en g) par les

Calculer l’intensité du champ électrique pour que le fil s’incline d’un angle  vers la droite par rapport à la verticale On prendra g = 10 m.s