Copyright © 2009 Anderson Silva
Copyright © 2009 Khoa Nghiem
Copyright © 2009 Prénom Nom du relecteur
Article paru dans le n°167 de la Gazette Linux d'octobre 2009.
Cet article est publié selon les termes de la Open Publication License. La Linux Gazette n'est ni produite, ni sponsorisée, ni avalisée par notre hébergeur principal, SSC, Inc.
Table des matières
Dans l'article du mois dernier, j'ai parlé du langage de programmation Logo comme étant un outil pour vous aider à initier vos enfants aux notions de mathématiques et de programmation. Ce mois-ci, je vais vous amener plus loin dans la programmation avec Logo et vous montrer quelques concepts plus avancés comme les boucles, les conditions, la définition de procédure et (oserai-je?) même la notion de récursion.
Avant que nous ne commencions cependant, j'aimerais faire une petite mise en garde; j'ai toujours pensé que Logo n'était qu'un langage de programmation destiné aux enfants seulement, et même si j'ai écrit ces articles concernant Logo pour enseigner la programmation aux enfants, je sais qu'il y a pas mal d'universités qui utilisent Logo pour leurs cours même après la licence, pour enseigner des techniques complexes de récursion et autres sujets de programmation. Donc, ne pensez pas un instant que Logo n'est qu'un jouet : il est bien à la fois drôle et éducatif.
Ceci étant dit, allons-y, apprenons un peu plus de Logo.
Dans Logo, il est possible d'appendre à notre tortue « programmable » de nouveaux mots. Pour faire cela, nous utilisons le mot-clé to. C'est avec to que nous définissons nos procédures en Logo, et que nous avons également la possibilité de sauvegarder notre travail sur le disque, ce dont je parlerai plus tard.
Si vous décidez de faire plus de recherches et d'en apprendre plus sur Logo par vous-même, un des tout premiers exemples que vous rencontrerez sera sans doute la procédure suivante :
to square repeat 4 [fd 100 rt 90] end
C'est ainsi que nous apprenons à la tortue de Logo le mot «square» (carré). To square signifie : Répéter ce qui suit 4 fois : avancer de 100 pixels et tourner à droite de 90 degrés. Maintenant, quand vous appelez square dans l'interpréteur de Logo, la tortue va vous dessiner le carré que vous demandez. Le seul problème ici est que, si vous quittez votre interpréteur de commande avec la commande bye, la tortue oubliera ce mot, et devoir enseigner le même mot sans arrêt finira par devenir assez ennuyeux, même pour un enfant.
La solution est de sauvegarder votre nouvelle procédure (c'est-à-dire le mot) dans un fichier, et de le charger quand vous démarrez votre interpréteur. Pour sauvegarder votre travail, tapez :
? save "square.logo? save "square.logo
où, de la même manière que la commande help dont nous avions parlé le mois précédent, le nom du fichier doit être précédé par des guillemets. Une fois que vous aurez sauvegardé le nouveau mot que vous avez défini, vous verrez un fichier texte appelé square.logo dans le même répertoire où vous avez démarré votre interpréteur.
Dès l'instant où vous commencerez à vous familiariser avec Logo, vous aurez toujours le choix d'écrire votre code directement dans un fichier texte, et ensuite de le charger via l'interpréteur, en faisant :
? load "square.logo
Supposons que, une fois que vous avez appris à la tortue le mot square, vous vouliez changer légèrement sa définition. Peut-être voulez-vous ajouter des couleurs ou dessiner un plus grand carré. Eh bien, Logo ne vous laissera pas créer un nouveau mot square et il se plaindra en affichant le message suivant si vous essayez :
? to square square is already defined
Si vous voulez modifier un mot existant que vous aviez appris à la tortue, il vous faudra utiliser la commande ed.
? ed "square
Remarque : Pour que ed puisse fonctionner, vous devez affecter la variable d'environnement shell $EDITOR dans votre éditeur de texte favori. J'utilise souvent : export EDITOR="vi" dans mon terminal avant de démarrer mon interpréteur Logo.
Tout ceci étant dit, j'aimerais vous donner un dernier exemple plus complexe, mais amusant, de Logo. L'exemple ci-dessous est représenté comme si on le tapait directement dans l'interpréteur Logo, puis sauvegardé dans un fichier appelé example.logo.
Welcome to Berkeley Logo version 5.6 ? to pick_color > output pick [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15] > end pick_color defined ? to colorful_circle :size > if :size = 1 [stop] > setpencolor pick_color > arc 360 :size > colorful_circle :size - 1 > end colorful_circle defined ? save "example.logoWelcome to Berkeley Logo version 5.6 ? to pick_color > output pick [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15] > end pick_color defined ? to colorful_circle :size > if :size = 1 [stop] > setpencolor pick_color > arc 360 :size > colorful_circle :size - 1 > end colorful_circle defined ? save "example.logo
Dans l'exemple ci-dessus, j'ai appris à la tortue de Logo deux nouveaux mots : pick_color et colorful_circle.
Le mot pick_color est essentiellement une fonction qui utilise la commande pick pour choisir aléatoirement un nombre entre 1 et 15. Le commande output est utilisée pour retourner la valeur choisie par pick.
Le mot colorful_circle est carrément plus complexe, et il contient beaucoup de nouvelles fonctions de Logo. Si vous regardez la toute première ligne où colorful_circle est définie avec to, on a :size comme étant un de ses paramètres. Dans Logo, les variables sont identifiées par deux points (:) placés devant elles.
Puis, nous avons une condition if, vérifiant si :size est égal à 1, et, si c'est le cas, quitte la procédure. Cette déclaration if est considérée comme étant une condition d'arrêt, car colorful_circle est un mot récursif, ce qui signifie qu'il s'appelle lui-même pour exécuter une règle, et arrêtera de le faire seulement quand la condition d'arrêt est rencontrée.
Avec setpencolor pick_color, la tortue pourra choisir la couleur qu'elle souhaite pour dessiner le prochain cercle qu'elle va tracer. (Remarque : on a parlé de setpencolor dans l'article du mois dernier).
Après avoir choisi et défini une couleur, on peut passer au dessin du cercle avec la commande arc. Pour comprendre la commande arc, utilisons l'aide de Logo. Dans l'interpréteur, on tape :
? help "arc ARC angle radius draws an arc of a circle, with the turtle at the center, with the specified radius, starting at the turtle's heading and extending clockwise through the specified angle. The turtle does not move.
Donc, la commande arc prend deux paramètres ; un angle et un rayon. Parce qu'on souhaite dessiner un cercle, on comprend que l'angle de mon arc est de 360 degrés. Le rayon, comme on peut se rendre compte, correspondra à la valeur de la variable :size. Si :size est modifiée, la tortue nous dessinera des cercles de tailles différentes.
Enfin, nous appelons colorful_circle. Oui, vous lisez bien : c'est exactement ce mot-là qu'on est en traind d'apprendre à la tortue, mais on soustrait 1 du :size de départ pour ce mot. Notre récursion est alors terminée. Nous utilisons la récursion dans cet exemple pour diminuer le :size du cercle que la tortue dessine, et, quand :size devient 1, la tortue arrête de dessiner.
Welcome to Berkeley Logo version 5.6 ? load "example.logo ? colorful_circle 200.
Le code ci-dessus nous donne en réponse :
Êtes-vous un peu perdu, là? Probablement pas, mais cela ne veut pas dire que les enfants comprendront tout tout de suite, alors ne soyez pas trop déçu si c'est le cas. Ils n'ont pas besoin de connaître la récursion pour découvrir Logo. Je l'ai déjà dit, et je le redis encore : profitez de votre temps avec eux, enseignez-leur les bases, laissez-les vous regarder coder, laissez-les choisir les couleurs, laissez-les choisir par eux-mêmes les formes, et espérons-le, un jour, ils s'apercevront qu'on peut s'amuser tout autant avec la programmation et le raisonnement logique qu'à faire des jeux ou lire un livre.
Anderson Silva Anderson Silva est Ingénieur de version chez Red Hat. Il est titulaire d'une Licence en Informatique de la Liberty University et d'une Maitrise en Informatique de l'Université du Maine. Il est Ingénieur Certifié Red Hat, en vue de devenir Architecte Certifié Red Hat, et écrit des articles en lien avec Linux dans des parutions telles que la Gazette Linux, Revista do Linux et Red Hat Magazine. Anderson est marié depuis 11 ans avec son amour de jeunesse, Joanna, qui l'aide à la rédaction de ses articles et avec qui il a 3 enfants. Quand il ne travaille pas ou n'écrit pas, il fait de la photographie, passe du temps avec sa famille, se balade à vélo, regarde des courses de Formule 1 ou d'Indycar ou fait du karting avec ses fils.
Biographie traduite par Éric Deschamps
L'adaptation française de ce document a été réalisée dans le cadre du Projet de traduction de la Gazette Linux.
Vous pourrez lire d'autres articles traduits et en apprendre plus sur ce projet en visitant notre site : http://www.traduc.org/Gazette_Linux.
Si vous souhaitez apporter votre contribution, n'hésitez pas à nous rejoindre, nous serons heureux de vous accueillir.