Prédicats prédéfinis Prolog IV

cpu_time/1 Mesure du temps CPU

Types : cpu_time(?terme)
Description : cpu_time(T) unifie T avec le temps cpu (en millisecondes) écoulé depuis le
dernier appel à reset_cpu_time.
Exemples : >> reset_cpu_time, travail, cpu_time(T).
T = 16500. % soit 16,5 seconde CPU>>
Voir également : reset_cpu_time/0.
debug/0 Passage en mode debug

Description :

debug rend actif le débogueur. Celui-ci va collecter des informations et ef-fectuer des surveillances qui n’ont habituellement pas lieu lors de l’exécution normale des programmes. Ces derniers peuvent donc s’exécuter moins vite dans ce mode.
Le débogueur ne peut montrer des informations que sur les règles qui ont été compilées avec les primitives de la famillecompile.
Voir le chapitre « Environnement » pour de plus amples détails sur le débo-gueur.
Voir également : no_debug/0, compile/n.
def_array/2 Définition d’un tableau
Types : def_array(+atome, +entier)
Description : def_array(a; b) définit dynamiquement un tableau de constantes PROLOG de nom a et de longueur b. Ce tableau se comportera comme une variable « globale » (ultérieurement accessible pendant l’effacement de n’importe quel but) et «statique » (résistante au backtracking). Les valeurs légales de l’indice sont inclues dans f1; : : :; bg.
Si un tableau de même nom existe déjà :
– s’il s’agit d’un tableau de même taille, il ne se passe rien,
– si les tailles diffèrent, alors il se produit une erreur.
L’accès et l’affectation sont analogues à ceux des autres langages de program-
mation.

Exemples :

> def_array(tab, 10). true.
>> N ~ cc(1, 10), enum(N), record(tab(N), N.*.N). N=1;
N=2; N=3; N=4; N=5; N=6; N=7; N=8; N=9; N=10.
>> recorded(tab(6), X).
X=36.
>> undef_array(tab). true.
Voir également : record/2, recorded/2, redef_array/2, undef_array/1.

ebounds/3 Bornes d’un domaine

Description : ebounds(a; b; c) est utilisé pour récupérer les bornes inférieures et supérieures du domaine de a, dans l’extension des réels. Les bornes inférieures et supé-rieures du domaine de a sont unifiées respectivement avec b et c.
Un appel à bounds(a; b; c) échoue sia n’est pas d’un type compatible avec un type numérique.
Un réel étendu peut prendre les valeurs suivantes :
– un nombre réel x,
– +1, notépinfinity en Prolog IV,
– ,1, notéminfinity en Prolog IV,
– pour chaque nombre réel x, l’objet x+, qui est strictement plus grand que x, et strictement plus petit que tous les réels strictement plus grands que x. On note x+ up(x) en Prolog IV.
– pour chaque nombre réel x, l’objet x , qui est strictement plus petit que x, et strictement plus grand que tous les réels strictement plus petits que x. On note x dn(x) en Prolog IV.
D’un point de vue pratique, l’extension des réels est utilisée dans deux cas :
– pour pouvoir faire une analyse des bornes qui fonctionne même quand le domaine d’une variable est non-borné ;
– pour savoir si un intervalle est ouvert ou fermé.
En fait, on peut reprendre tous les types possibles d’intervalles, et voir les réponses effectuées par Prolog IV dans ces différents cas :
Intervalle Borne inf. Borne sup.
[a; b] a b
[a; b) a dn(b)
(a; b] up(a) b
(a; b) up(a) dn(b)
[a; +1) a pinfinity
(a; +1) up(a) pinfinity
(,1; b] minfinity b
(,1; b) minfinity dn(b)
(,1; +1) minfinity pinfinity
Les quatre informations à retenir sont les suivantes :
– ebounds/4 renvoie minfinity quand une variable n’est pas bornée inférieurement,
– ebounds/4 renvoie pinfinity quand une variable n’est pas bornée supérieurement,
– ebounds/4 renvoie up(a) quand une variable a une borne inférieure qu’elle ne peut pas atteindre,
– ebounds/4 renvoie dn(a) quand une variable a une borne supérieure qu’elle ne peut pas atteindre.
Exemples : >> ebounds(1,B,C).
C=1,
B=1.
>> ebounds(cc(1,2),B,C). C=2,
B=1.
>> ebounds(oo(1,2), B, C). C = dn(2),
B = up(1).
>> ebounds(pi, B, C).
C = dn(13176795/4194304),
B = up(6588397/2097152).
>> ebounds(ge(0), B, C). C = pinfinity,
B=0.
>> ebounds(ge(0), B, C). C = pinfinity,
B=0.
Voir également : eglb/2, elub/2.

eglb/2 Borne inférieure

Description :
Exemples :
eglb(a; b) sert à récupérer la borne inférieure (en anglais,greatest lower bound) du domaine de a dans l’extension des réels. Le résultat est stocké dans la variable b.
Un appel à eglb(a; b) échoue sia n’est pas d’un type compatible avec un type numérique.
Voir ebounds/3 pour une définition accompagnée de remarques impor-tantes concernant les réels étendus.
>> eglb(1, B). B=1.
>> eglb(cc(1,2), B). B=1.
>> eglb(oo(1,2), B). B = up(1).
>> eglb(pi, B).
B = up(6588397/2097152).
>> eglb(ge(0), B). B=0.
>> eglb(le(0), B). B = minfinity.
Voir également : ebounds/3, elub/2.

elub/2 Borne supérieure

Description :
Exemples :
elub(a; b) sert à récupérer la borne supérieure (en anglais,lowest upper bound du domaine de a dans l’extension des réels. Le résultat est stocké dans la variable b.
Un appel à elub(a; b) échoue sia n’est pas d’un type compatible avec un type numérique.
Voir ebounds/3 pour une définition accompagnée de remarques importantes concernant les réels étendus.
>> elub(1, B). B=1.
>> elub(cc(1,2), B). B=2.
>> elub(oo(1,2), B). B = dn(2).
>> elub(pi, B).
B = dn(13176795/4194304).
>> elub(ge(0), B). B = pinfinity.
>> elub(le(0), B). B=0.
Voir également : ebounds/3, eglb/2.
enum/1

enum/3 Enumération d’entiers

Description : enum(a; b; c) enumère les entiers du domaine de a compris entre b et c et les unifie avec a. L’ordre dans lequel l’énumération est effectuée n’est en aucun cas garanti.
enum(a) enumère les entiers du domaine de a et les unifie avec a.
enum/3 est définie en fonction de enum/1 de la manière suivante :
enum(X,L,U) :-
cc(X, L, U),
enum(X).
Pour les deux prédicats, une erreur est déclenchée quand des arguments ne sont pas compatibles avec des nombres réels.
Exemples : >> X ~ cc(0,5), enum(X).
X=0;
X=1;
X=2;
X=3;
X=4;
X=5.
>> enum(X, .-. pi, pi). X=-3;
X=-2; X=-1; X=0; X=1; X=2; X=3.
>> enum(toto).
error: error(‘Real variable expected’,enum)
Voir également : enumlin/3, intsplit/3.
enumlin/1

enumlin/3 Enumération d’entiers

Description : enumlin(a; b; c) enumère les entiers du domaine de a compris entre b et c et les unifie avec a. L’ordre dans lequel l’énumération est effectuée n’est en aucun cas garanti. Ici, ce sont les contraintes linéaires qui sont prises en compte pour contrôler l’énumération.

Cours gratuitTélécharger le cours complet

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *