Devoirs Hebdomadaire N°7 Prolog I |
M. Joseph DASSE BRIKA |
|
Soient les opérations d'addition, de soustraction, de multiplication et de division entière en Prolog sur les entiers naturels spécifiées par : nat(zero). %addition : a/3 :
on dit A plus B d'où %soustraction : s/3
: si B > A la soustraction n'a pas de sens... %multiplication :
m/3 : on dit A multiplié B d'où %la division
entière : d/3 on dit A divisé par B d'où %d4/4 On veut "optimiser" l'addition et la multiplication en se fondant sur les remarques : "on ajoute le plus petit au plus grand" (pour A+B si A<B on calcule en fait B+A) et "on multiplie le plus grand par le plus petit "(pour A*B si A<B on calcule en fait B*A) QUESTION 1 : introduire ces "optimisations" dans la spécification des prédicats aOPTI/3 et mOPTI/3 utilisant les prédicats a/3 et m/3 ci dessus et donner un exemple d'exécution pour chacun d'eux. |
Les entiers naturels relatifs : On définit Z les entiers relatifs comme des entiers naturels ( s(s(...(zero)...)) ) signés. Par exemple z(+ , s(s(zero))) ou bien z(- , s(s(zero))). Ce prédicat z/2 , spécifié ci dessous, permet aussi de vérifier si un nombre est un entier relatif : z(+ , Valeur) :-
nat(Valeur). Remarque : le 0 est noté indifféremment : z(+ , zero) ou z(- , zero) QUESTION 2 : Spécifier en Prolog les 4 opérations addition (aZ/3), soustraction (sZ/3), multiplication (mZ/3) et division entière (dZ/3) sur les entiers relatifs en utilisant les prédicats sur les "nat" de la question 1 et les règles classiques sur les signes (+,-) et donner un exemple pour chaque opération. |
Question1
%addition : a/3 : on dit A plus B Question 2
z(+ , N) :- nat(N). ?- dZ(z(+ , s(s(s(s(s(s(s(zero)))))))) ,z(- , s(s(s(zero)))) , Q). Q = z(-, s(s(zero))) ; No |
FIN_dh7 |
|
|
ACCUEIL CONTACT FAVORIS ANNALES DH1 DH2 DH3 DH4 DH5 DH6 DH7 DH8 DH9 DH10 DH11 DH12 DH13 DH14 DH15 DH16 |