Le Logo est généralement connu par sa tortue (un simple triangle dans le cas de MSWLogo) : la première série d'exemples ci-dessous (Tortue et graphisme) lui est consacrée. Cependant le Logo est un langage de programmation complet et puissant. Tortue et graphisme ne sont qu'une des manières d'aborder le Logo et la programmation (par exemple aucun des trois tomes du livre Computer Science Logo Style n'utilise cet aspect du Logo).
Conseils de lecture de ce document
Sommaire
Ce chapitre Tortue et graphisme est inspiré de A quick lesson in Logo (Terrapin Software).
Même les jeunes enfants apprennent rapidement à déplacer la tortue en se servant de mots spéciaux qui sont intuitifs et faciles à mémoriser. Par exemple, tapez l'instruction avance 50 pour déplacer la tortue de 50 pas (des pixels en fait, c'est-à-dire des points d'écran). Tapez l'instruction droite 90 pour la faire tourner à droite de 90 degrés (dans le sens des aiguilles d'une montre). Dans MSWLogo, on tape ces instructions dans la ligne de commande de la fenêtre texte, la tortue quant à elle se déplace dans la fenêtre graphique (on dit simplement l'écran).
avance 50 est une instruction, c'est-à-dire quelque chose que le Logo est capable d'interpréter comme un ordre. Une instruction doit contenir la description exacte de ce que vous voulez que le Logo fasse pour vous.
Les mots qui comme avance et droite font partie du vocabulaire du langage Logo sont des noms de procédures. Une procédure est comme une recette décrivant une tâche à accomplir. Par exemple la procédure qui a pour nom avance a pour tâche de faire avancer la tortue.
En combinant les 2 instructionsavance 50et droite 90, il est facile de faire dessiner un carré à la tortue, sachant qu'elle se déplace en trainant un crayon de couleur :
avance 50 droite 90 avance 50 droite 90 avance 50 droite 90 avance 50 droite 90
Notes
En utilisant la procédure répète, vous pouvez combiner ces 2 instructions pour vous simplifier la tâche et arriver plus rapidement au même dessin d'un carré :
répète 4 [avance 50 droite 90]
Notez qu'après le dessin de ce carré, la tortue a repris son état initial, c'est-à-dire qu'elle occupe la même position et a le même cap (orientation). Vous pouvez aisément le vérifier en utilisant les procédures pos et cap, en tapant les instructions montre pos et montre cap :
montre pos >> [0 0] montre cap >> 0
Par convention, le symbole >> ci-dessus indique qu'une valeur a été calculée par l'évaluateur Logo (par exemple la valeur [0 0]) et que celui-ci a affiché cette valeur dans la fenêtre texte.
[0 0]représente une position, c'est-à-dire une paire de coordonnées selon les axes X et Y. La position[0 0]correspond à l'origine des axes X et Y qui est au centre de l'écran.
La valeur du cap est donnée en degrés : 0 correspond à une orientation verticale vers le haut (le nord).
Le Logo vous permet de définir très facilement vos propres nouvelles procédures en les construisant à partir d'autres procédures. Voici comment définir une procédure carré dont la tâche sera de dessiner notre carré de 50 pas de côté :
pour carré répète 4 [avance 50 droite 90] end
En pratique, vous écrirez vos définitions de procédures (comme carré) dans un fichier Logo, à l'aide de l'éditeur Logo (similaire au Bloc-notes de Windows).
Dorénavant, pour dessiner un carré, il vous suffira de taper carré dans la ligne de commande. De plus la procédure carré s'utilise comme n'importe quelle procédure du langage Logo lui-même (une procédure du langage Logo est dite une procédure primitive). En particulier toute procédure existante peut être utilisée dans la définition d'une nouvelle procédure : de fait, les procédures sont les blocs de constructions d'un programme.
Voici quelques exemples d'utilisation de la procédure carré.
Pour dessiner un drapeau :
avance 60 carré recule 60
La dernière instruction n'est pas indispensable : elle fait revinir la tortue à son point de départ.
Pour dessiner un cercle de carrés, tapez :
répète 12 [carré droite 30]
La tortue parcourt 12 carrés décalés chacun de 30 degrés. Au bout du compte, elle aura tournéde 360 degrés - un cercle complet - et occupera de nouveau la même position et le même cap qu'au début du dessin.
Il est très facile d'expérimenter en Logo. Si vous voulez voir de plus près la progression du dessin ci-dessus, vous pouvez par exemple taper l'instruction :
répète 3 [carré droite 30]
Ceci correspond au premier quart du dessin. Pour terminer le dessin, tapez l'instruction :
répète 9 [carrédroite 30]
Pour dessiner une maison, on peut définir une nouvelle procédure maison à partir de la procédure carré et d'une autre nouvelle procédure triangle.
pour maison carré avance 50 droite 90 triangle end pour triangle répète 3 [avance 50 gauche 120] end
On peut aussi ajouter un argument à la définition de la procédure carré pour obtenir facilement des dessins de carré de taille différente.
pour carré :taille répète 4 [avance :taille droite 90] end
Les carrés de différentes tailles s'obtiennent en tapant successivement : carré 10, carré 20, carré 30, etc.
La procédure poly.spirale ci-dessous est plus complexe. Elle a 2 arguments, une distance et un angle. C'est une procédure récursive, c'est-à-dire qu'elle est définie en terme d'elle-même : dans l'avant-dernière instruction, la procédure s'appelle elle-même avec des arguments modifiés (par exemple le 1er argument, la distance, est augmenté de 5 via l'instructionsomme :distance 5). La 2ème ligne est une instruction conditionnelle qui arrête l'exécution de la procédure dès que la distance dépasse la valeur 205 . Pour obtenir le dessin ci-dessus, tapezpoly.spirale 5 120dans la ligne de commande.
pour poly.spirale :taille :angle si :taille>205 [stop] avance :taille droite :angle poly.spirale somme :taille 5 somme :angle 0.12 end
Pour terminer ce chapitre, quelques images fractales réalisée en Logo :
Si vous avez suivi cette première leçon, vous avez peut-être remarqué combien la syntaxe de l'utilisation d'une procédure est simple et uniforme : c'est toujours le nom de la procédure suivi de ses arguments. Ceci est vrai aussi bien pour une procédure primitive que pour une procédure que vous avez définie vous-même. Dans la plupart des autres langages ce n'est pas le cas : chaque procédure primitive a sa syntaxe particulière différente de celle des autres.
A titre de préparation, commencez par simplement convertir 50 FB en tapant quelques instructions dans la fenêtre texte.
Un euro valant 40.3399 FB, la conversion se fait en divisant par 40.3399 à l'aide de la procédure quotient.
La procédure quotient retourne une valeur qui est le résultat de la division de son premier argument par son second.
La procédure montre n'a qu'un argument : elle affiche celui-ci dans la fenêtre texte. Dans ce qui suit, l'affichage d'une valeur dans la fenêtre texte est symbolisé par >> suivi de la valeur.
montre quotient 50 40.3399 >> 1.2394676238662
En arrondissant aux centimes, vous obtiendriez 1.24 euro. Ce qui en programmation peut se faire selon les 3 étapes suivantes:
montre produit 100 1.2394676238662 >> 123.94676238662 montre arrondi 123.94676238662 >> 124 montre quotient 124 100 >> 1.24
Donc pour convertir un montant en FB en euros et arrondir aux centimes, il faut effectuer les 4 étapes suivantes :
La première étape sera réalisée par la procédure FB.euro ci-dessous. La procédure primitive retourne ne s'emploie que dans la définition d'une procédure : elle termine l'exécution de la procédure là où elle apparaît de telle sorte que cette procédure retourne la valeur spécifiée en argument de retourne. La procédure retourne n'accepte qu'un argument.
pour FB.euro :n retourne quotient :n 40.3399 end
La procédure finale, FB.euro.arrondi, se définit comme suit :
pour FB.euro.arrondi :n retourne quotient arrondi produit 100 FB.euro :n 100 end
Afin d'augmenter la lisibilité d'une expression, il toujours permis d'ajouter des parenthèses autour de l'application d'une procédure. Dans la 2ème version de FB.euro.arrondi ci-dessous, les parenthèses permettent de mieux visualiser les 2 argument de quotient qui sontarrondi produit 100 FB.euro :n et 100, ce qui donne :
pour FB.euro.arrondi :n retourne quotient (arrondi produit 100 FB.euro :n) 100 end
Vous pourriez utiliser plus de parenthèses et par exemple écrire le premier argument de quotient comme ceci :
(arrondi produit 100 (FB.euro :n))
Exemples de calcul :
montre FB.euro 100 >> 2.47893524773239 montre FB.euro.arrondi 100 >> 2.48
Que se passe-t-il quand l'évaluateur Logo rencontre une instruction comme :
montre produit 100 quotient 50 40.3399
Le Logo évalue l'instruction pas à pas en la parcourant de gauche à droite :
Une façon schématique de présenter les choses est d'utiliser des flèches pour relier chaque procédure à ses arguments. Par exemple dans la définition de FB.euro.arrondi, l'expression quotient arrondi produit 100 FB.euro :n 100 se représente comme ceci :
ce qui montre bien que :