• Aucun résultat trouvé

Règles pour la sortie

Dans le document Apprendre et enseigner Prolog pdf (Page 135-140)

Exemple 3 : Cet exemple montre comment utiliser une variable pour contrôler un programme de l'extérieur La règle liste_de_un qui a été donnée

5. Les entrées / sorties 0 Généralités

5.2.1. Règles pour la sortie

beep

Génère une tonalité d'avertissement. flush

Vide le tampon de caractères de l'unité courante de sortie, en envoyant tous les caractères en attente d'écriture sur l'unité physique associée.

out(t) outl(t)

Ecrit le terme t sur l'unité courante. Tout terme écrit avec out peut être relu avec in si l'option d'interprétation du caractère spécial «\» est active (cf. §2.3. du manuel d'utilisation). Si le terme est plus long que la longueur restant sur la ligne courante, un retour chariot est inséré en respectant les principes suivants:

(1) Lorsqu'une chaîne ne peut être imprimée sur une seule ligne, elle est coupée à l'endroit requis par insertion d'un retour-chariot masqué (c'est-à- dire précédé par le caractère «\»).

(2) Un nombre n'est pas coupé sauf si, tout seul, il est plus long que toute une ligne; dans ce cas il est coupé comme une chaîne.

(3) Un identificateur n'est pas coupé sauf si, tout seul, il est plus long que toute une ligne; dans ce cas il est coupé comme une chaîne.

L'écriture du terme se fait avec les conventions suivantes:

(1) Les listes sont imprimées en notation pointée pour la syntaxe Prolog II, en notation avec des crochets carrés pour la syntaxe Edinburgh ou si

(2) Si une chaîne contient un caractère non imprimable, celui-ci est écrit sous forme d'escape séquence imprimable (voir outm).

(3) Tout identificateur ne répondant pas à la syntaxe d'un identificateur est quoté.

(4) Le contexte courant d'exécution détermine les abréviations possibles pour les identificateurs.

outl(t) équivaut à la suite de buts out(t) line : lorsque le terme t a été écrit on produit le passage à la ligne suivante.

Exemple:

> out(1.Pierre."Salut!".nil); 1.Pierre."Salut!".nil{}

>

N.B. : Les accolades imprimées à la suite du terme indiquent la réussite de l'effacement du but out(1.Pierre."Salut!".nil). Une manière d'en empêcher l'impression consiste à faire échouer artificiellement cet effacement :

>out(1.Pierre."Salut!".nil) line fail; 1.Pierre."Salut!".nil

> outm(s) outml(s)

Ecrit la chaîne s sur l'unité active de sortie, sans écrire les quotes et en interprétant correctement les caractères de formatage que s peut contenir (par exemple: \n). Si la chaîne est plus longue que la place restante sur la ligne en cours, alors elle est coupée par un retour chariot «masqué». Les caractères correspondant à un code ISO 8859-1 non imprimable sont envoyés sur l'unité courante de sortie sans transformation.

Exemple:

> out("\tBonjour!") line fail; "\tBonjour!"

> outm("\tBonjour!") line fail; Bonjour!

>

outml(s) équivaut à outm(s) line. outm(s, n)

Ecrit n fois la chaîne s avec les mêmes conventions que ci-dessus. Exemple :

>outm("-",40) line fail;

--- >

line

Va à la ligne. page

Va à la page. Sur l'unité "console", l'écran est effacé et le curseur positionné en haut à gauche de l'écran. N'a pas d'effet dans l'environnement graphique. paper

Provoque la copie de ce qui se passe à la console dans un fichier journal (prolog.log par défaut).

no_paper

Annule l'effet de paper. Le fichier journal est fermé uniquement en fin de session. Un appel ultérieur à paper viendra ajouter des informations à la fin du fichier.

set_cursor(n1, n2)

Le curseur est positionné en (n1,n2) sur l'écran, n1 étant la coordonnée de la colonne et n2 celle de la ligne. (1,1) correspond au coin en haut à gauche de l'écran. On doit avoir :

1 ! n1 ! largeur de la ligne et 1 ! n2 ! nombre de lignes de l'écran. N'a pas d'effet dans l'environnement graphique.

set_line_cursor(n)

Positionne le pointeur courant de caractères à la position n sur la ligne courante. Cela fournit une sorte de tabulation. set_line_cursor ne revient pas en arrière à partir de la position courante du pointeur. La position du premier caractère est 1.

sprintf

La fonction C sprintf est accessible depuis Prolog avec la primitive callC (voir § 7.7. de ce manuel).

> callC(sprintf(<"",x,80>,"valeur: %ld",200)); {x="valeur: 200"}

L'utilisation des primitives suivantes nécessite le chargement préalable du module de dessin d'arbres (voir § 5.3).

draw_equ(t)

Dessine le système minimal d'équations représentant un arbre fini ou infini t . Pour utiliser cette primitive, il faut que le module de dessin d'arbres soit chargé.

> ... draw_equ(aa(bb(cc,dd),bb(cc,dd))) ... aa +--^--+ v1026 v1026 v1026 = bb +^-+ cc dd {} draw_tree(t)

Dessine l'arbre fini t sur l'écran (si le terminal a des possibilités graphiques, les symboles semi-graphiques sont utilisés). Pour utiliser cette primitive, il faut que le module de dessin d'arbres soit chargé.

> ... draw_tree(aa(bb(cc,dd),bb(cc,dd))) ... aa +--^---+ bb bb +^-+ +^-+ cc dd cc dd {} draw_mode(x)

Cette primitive, ainsi que la suivante concernent la manière dont les arbres sont dessinés. En effet, suivant le type d'écran certains caractères semi-graphiques sont utilisés pour obtenir des dessins d'arbres plus jolis. draw_mode(x) fournit dans x une chaîne correspondant au type d'écran utilisé. Les valeurs possibles de x sont dépendantes de la machine: "VT100", "GRAPHICS", "TTY". "TTY" qui correspond à un écran sans possibilité graphique, existe sur toutes les machines. Pour utiliser cette primitive, il faut que le module de dessin d'arbres soit chargé.

set_draw_mode(x)

Permet de choisir le type d'écran utilisé pour le dessin des arbres. Les valeurs de x sont les mêmes que précédemment. Si vous voulez faire imprimer des arbres sur une imprimante classique, il faut se mettre en mode "TTY". Pour utiliser cette primitive, il faut que le module de dessin d'arbres soit chargé. 5.2.2. Modification de l'unité de sortie

Le nom des unités de sortie, peut être soit une chaîne Prolog, soit un identificateur Prolog, soit un entier. Toutefois, les fichiers et les fenêtres prédéfinies sont toujours désignés par des chaînes.

output(u) output(u,n)

L'unité de nom u devient l'unité courante de sortie. Si l'unité désignée par u ne figure pas déjà dans la liste des unités de sortie ouvertes, alors un descripteur pour l'unité est alloué et éventuellement un fichier est créé ayant le nom indiqué par u. Dans la forme à deux arguments, n précise la taille, en nombre de caractères, du tampon de l'unité. Elle doit être comprise entre 400 et 32K. Si n n'est pas dans cet intervalle, la taille du tampon sera de la valeur la plus proche. Dans la forme à un seul argument, le tampon aura une taille de 400 caractères.

En aucun cas ces primitives ne créent une fenêtre ou un fichier mémoire, il faut utiliser pour cela les primitives spécifiques. Si u est une chaîne de caractères terminée par le signe "+", le fichier dont le nom est la chaîne privée de ce signe est alors ouvert en mode append, c'est à dire que si ce fichier existe déjà sur disque, les sorties qui suivront vont y être ajoutées en fin. output_is(u)

Fournit dans u le nom de l'unité de sortie courante. close_output

L'unité courante est enlevée du sommet de la pile des unités de sortie ouvertes. Si elle correspond à un fichier, alors celui-ci est fermé.

close_output(u)

u est le nom d'une unité qui doit figurer dans la liste des unités de sortie ouvertes. S'il s'agit d'un fichier, il est fermé. Le descripteur de l'unité est enlevé de cette liste et détruit. En aucun cas cette primitive ne ferme une fenêtre, il faut utiliser pour cela les primitives spécifiques.

line_width(n)

Fournit dans n la longueur maximum actuelle des lignes de l'unité courante, définie par set_line_width.

set_line_width(n)

Permet de définir la longueur maximale des lignes de l'unité courante de sortie. n devient la nouvelle longueur de ligne de l'unité. Par défaut, la longueur maximale de la ligne est de 80 caractères. Dans tous les cas, elle est limitée à 400 caractères. Si aucun passage à la ligne suivante n'a été demandé, avant que la longueur maximum de la ligne ait été atteinte, Prolog le force, en insérant un <retour chariot> entre deux unités ou bien la séquence <\><retour chariot> à l'intérieur d'une unité.

echo

Active l'option qui provoque l'affichage sur l'unité "console" des caractères lus ou écrits sur une autre unité, de type fichier.

no_echo

Annule l'effet de echo.

Dans le document Apprendre et enseigner Prolog pdf (Page 135-140)