La NSCRéalisations en XLogo

 

Si vous visitez les liens proposés, merci de cliquer sur Précédente afin de revenir ici ; les liens externes, eux, s'ouvrent dans une autre fenêtre.

A tout seigneur, tout honneur : La couleur du crayon se demande de manière classique (fcc + un nombre entre 0 et 7 selon la documentation en ligne sur le Site de l'auteur). Et depuis peu, on peut choisir la grosseur de la mine du crayon (voir en fin de page).
Pour obtenir une suite de couleurs dans un dessin, inutile de saisir FCC CC + 1 comme en PLogo ; la primitive CC n'existe pas et, on peut très bien s'en passer. Jean-François Lucas obtient le même résultat avec l'ordre fcc hasard 256 ; cette solution fonctionne sous XLogo. Mais il en est une autre que Loïc nous explique. Je le cite : "En java, la couleur d'un pixel est codé par un entier de 32 bits, les 8 premières représentent la composante rouge, les 8 suivantes la composante verte, les 8 suivantes la composante bleue, les 8 dernières la transparence (permet de "ternir" la couleur). J 'ai supprimé la transparence, et donc il reste les 3 premières composantes rouge, vert, bleu d'où en anglais le système [r g b] : 8 bits pour chaque nombre donc r g et b sont compris entre 0 et 255. On peut ainsi obtenir environ 16 millions de couleurs."

Loïc se fend ensuite d'une procédure bien pratique qu'il me permettra de vous donner :

pour couleur_hasard
retourne phrase liste hasard 256 hasard 256 hasard 256
fin

Et l'illustre par un petit programme "beau" ; une rosace de sa manière :

pour beau
ve ct repete 180[av 5 fcc couleur_hasard repete 60[av 10 td 6] td 2]
fin

Mais : qu'est-ce que cela donne ? Une belle image que l'on peut enregistrer (Fichier, Capturer l'image). XLogo enregistre les images au format .png ; à ce format, le "beau" pèse 62 Ko. L'image débarrassée de l'espace graphique inutile et traduite en .jpg (ce qui est stupide), pèse 48 Ko ; la même, en .gif, ne pèse plus que 46 Ko.
Je verrais donc plus tard si je réalise des pages avec ces illustrations.

Pour continuer : Je désire passer à autre chose et, donc, sauver les procédures. Ceci ne se fait pas au niveau de l'éditeur mais au niveau "supérieur" : menu Fichier, option Enregistrer sous. L'extension par défaut est .lgo. Tentez de lire ce fichier dans le Bloc-notes et vous retombez sur les célèbres aberrations de Microsoft (ASCII Windows versus ASCII DOS)...

L'Editeur XLogo, lors, permet d'imprimer, copier, couper et coller. Pour sortir de l'Editeur en interprétant (le Ctrl Q de PLogo), il n'y a pas de boutons offert par soucis de ne point surcharger l'interface. Ceci est corrigé dans la version 0.9.6 !

Il me reste à découvrir s'il existe un équivalent de la primitive RAMENE (crée dès la version 0.9.7) qui copie un programme de votre dossier (disque dur) au logiciel et permet donc de l'éditer à nouveau. Une option "charge" dans l'éditeur pourrait avoir le même effet. Là, il vous faudra lire la documentation écrite par l'auteur afin de découvrir sa solution.

Pour vider l'Editeur et passer à un autre travail (d'aucun disent : "projet"), je ferme ledit Editeur et saisis efns dans la ligne de commandes.

Passons aux choses "sérieuses" : ces procédures qui, au début des années 80, plantaient les faibles machines (mais pas toutes) et les mauvaises versions de Logo. Je savais déjà que j'en serais pour mes frais ; en effet, dans sa doc, Loïc inclut une fractal(e) de belle facture puisqu'il s'agit de la célèbre courbe de Koch dont il a traduit la version de Georges NOEL écrite en JFLogo qui se trouve ici. Il fallait juste, en fait, transcrire le test. Comme le DiaLogo, JFL a opté pour un teste sivrai sifaux ; Loïc revient au plus classique si [alors] [si non] choisit aussi par Profil.

Toujours d'après Georges Noël et les pages "100% fractale", je choisis le Diamant. Rien à changer dans la procédure de base si ce n'est, encore une fois, le test qui devient (ah oui = les commentaires, à éviter sur la ligne pour et la ligne fin selon Loïc, sont précédés d'un #) :

si :n = 0 [stop] #et la suite qui commence ainsi :
av :cote / 2

On peut créer une procédure d'appel :

pour dodiamant :cote :n
diamant :cote :n
av :cote * 2 tg 180
diamant :cote :n
fin

Et demander (par exemple) : ve fcfg 0 ct td 90 dodiamant 150 6

Peut-être aussi à cause de mon choix de travailler sur un fond noir pour des dessins fins et colorés, ce diamant.gif "fait bien" ses 16 Ko ; ce qui, en carat, docteur, donne ... :-)

Notons qu'un ve ne remet pas le fond en blanc et conserve au crayon, la dernière couleur utilisée.Ceci correspondrait à une demande faite à l'auteur. Je ne partage pas cette prière : lorsque l'on a saisi cet ordre de vider l'écran, il est bon de savoir que l'on va travailler sur une nouvelle "feuille", que l'on doit reprendre un crayon, même si c'est celui que l'on vient d'utiliser et, enfin, que l'on va retrouver la tortue au centre de l'écran (pos [0 0]), nez vers le "nord" (cap 0) ; ces deux derniers points étant respectés. Ceci est "corrigé" dans les versions actuellement en ligne.

Le langage Logo est, avant tout, un outil pédagogique ; comme tel, il ne devrait pas éviter de décomposer toute démarche au profit de certaines facilités.

Se déplacer sans avancer : la récursivité sur le graphisme fonctionne très bien ! J'ai connu un Logo qui nous sortait un "débordement de piles" dès les premiers tests un peu poussés...

Voyons comment se comporte cette tortue pour se déplacer non pas en suivant l'ordre d'avancer de tant de pas, mais en se rendant directement à des coordonnés (abscisses et ordonnées). La figure Manpower est déjà mentionnée à cette page comme à celle-ci. Naturellement, tout se passe à merveille ! Ne cachez pas la tortue et vous vous trouvez presque face aux célèbres oeuvres de Vitruve puis de Vinci montrées ici.

pour manpower
fpos [120 120] fpos [120 -120]
fpos [-120 -120] fpos [-120 120]
fpos [120 120] fpos [-120 -120]
fpos [0 120] fpos [120 0] fpos [120 120]
fpos [-120 0] fpos [120 0]
fpos [-120 120] fpos [0 -120]
fpos [-120 0] fpos [120 0] fpos [-120 120]
fpos [120 -120] fpos [-120 0]
fpos [-120 -120] fpos [120 0]
fpos [0 120] fpos [120 -120]
fpos [0 -120] fpos [-120 120]
fpos [0 120] fpos [0 -120] fpos [120 0]
fpos [120 120] fpos [0 -120] fpos [0 120]
fpos [-120 0] origine
fin

Au fait : cette procédure emprunte-t-elle le parcours optimal ; le moins de chemin possible et repasser le moins de fois sur un même trajet ? Personnellement, je vois des répétitions ; peut-on les éviter ?

Récursivité sur les mot, phrase et liste : tout d'abord, soyons claire (attention : 'humour'), je demande un minimum de respect. Lorsque je saisis ceci dans l'éditeur :

pour moi
ec [merci Papy Logo !]
fin

et que je demande l'exécution, je ne veux pas obtenir ceci : papy logo et, en retournant dans l'éditeur, trouver cela :

pour moi
ec [merci papy logo !]
fin

Même au niveau supérieur (ligne de commande), XLogo n'aime pas les majuscules. Loïc a revu ce point !

Sérieusement : ceci est peut-être nécessaire à la compatibilité entre Linux, Macintosh et Windows (ce dernier ayant déjà du mal à être compatible avec DOS sur le plan des caractères - je sais : je me répète, mais je ne digère pas la chose qui ne m'a jamais été clairement "expliquée". Le code ASCII ne serait plus universel depuis l'avènement des interfaces graphiques 'remplaçant' les systèmes d'exploitation ?).

Le 11 janvier 2004 : je viens de télécharger, toujours sans problème, la version 0.9.1. J'ai supprimé la précédente et "installée" celle-ci (155 Ko ; 3 de plus) avec laquelle je poursuis mes découvertes. J'ai aussi le plaisir d'apprendre qu'après avoir rencontré des échecs, Baby Logo (Stéphane H.) a réussit à installer XLogo sur sa machine tournant sous Windows XP !

Le traitement des listes, donc. La primitive comte fonctionne très bien : ecris compte [a z e] retourne 3. Et ecris compte "aze retourne aussi 3 ! Ce n'est en effet pas la même question (liste, mot) et le test n'est pas le même. Idem pour membre : ecris membre? "a [a z e] retourne vrai ; ecris membre? "a "qsd retourne faux ! Les primitive compte, membre, comme certaines des procédures que je vais montrer ci-dessous sont des fonctions. Il faut donc dire à Logo ce qu'il doit en faire ; d'où le écris.

La célèbre procédure pour épeler un mot (ou une liste) dans ses deux versions :

pour epelle :mot
si vide? :mot [stop]
ecris premier :mot
epelle sp :mot
fin

pour epeler :mot
si vide? :mot [stop] [ec premier :mot epeler sp :mot]
fin

Elles fonctionnent à merveille et, maintenant, XLogo respecte les majuscules dans les noms propres ! ;-)

Je passe sur les procédures (fonctions) INVERSEM et INVERSEL (inverser le contenu d'un mot, d'une liste) qui se trouvent ici et rebondis sur une des utilisations possible.

pour palindrome :m
#XLogo accepte majuscules, minuscules...
SI EGAL? :M INVERSEM :M [RETOURNE "VRAI] [RETOURNE "FAUX]
fin

ecris palindrome "toto retourne faux
ecris palindrome "ubu retourne vrai

Professeur de mathématique, Loïc a bien aimé jouer avec ce programme qu'il fait aussi figurer dans sa doc :

pour palin :n
SI PALINDROME :N [ECRIS :N STOP]
ECRIS PH PH PH PH :N "PLUS INVERSEM :N "EGAL SOMME :N INVERSEM :N
PALIN :N + INVERSEM :N
fin

Avec ce programme, Logo va construire un nombre étant un palindrome à partir d'un nombre qui n'en est pas un :

palin 78 retourne

78 PLUS 87 EGAL 165
165 PLUS 561 EGAL 726
726 PLUS 627 EGAL 1353
1353 PLUS 3531 EGAL 4884
4884

Mais là où Loïc m'a bluffé c'est lorsqu'il est parvenu à porter ces procédures dédiées à Umberto Ecco, écrite pour DiaLogo, fonctionnant sous PLogo d'Atari (mais pas sous la version DOS), en XLogo !

pour ana :mot
SI LISTE? :MOT [STOP]
NAGRA " :MOT COMPTE :MOT
fin

pour nagra :x :y :z
SI :Z = 0 [STOP]
# Il faut rajouter des parenthèses sur cette ligne
;; Je ne comprends pas très bien ce besoin et ne sais s'il est "normal" ; mais ça marche !
SI (COMPTE :Y )= 1 [ECRIS MOT :X :Y]
NAGRA MOT :X PREMIER :Y SP :Y COMPTE SP :Y
NAGRA :X MOT SP :Y PREMIER :Y :Z - 1
fin

ANA "BAR retourne
BAR
BRA
ARB
ABR
RBA
RAB

Dans ma Compilation Logo, je prévenais de ne pas tenter un ana d'un mot de plus de trois lettres ; voici quelques années, soit cela prenait un temps fou, soit ça "plantait" la machine et/ou le Logo... Qui veut tester ? :-)

Un petit compte à rebours pour terminer :

pour coareb :n
SI :N < 0 [STOP]
EC :N
COAREB :N - 1
fin

coareb 10 retourne tout à fait ce qu'il doit retourner, jusqu'à 0 et je vois que Loïc a abandonné ses chiffres écris avec une décimale ; solution qui posaient bien des problèmes avec les primitives premier, dernier, entre autres.

Une petite chose utile : Si, comme moi, vous désirez vous rendre compte de ce que donne la primitive ftc fixant la taille du crayon dont je parlais en début de cette page, voici un petit aperçu. En choisissant des couleurs au hasard et en donnant l'ordre à la tortue de prendre successivement des crayons allant d'une mine 0 à 80 et d'avancer de 10 pas chaque fois (je ne pousse pas plus loin) ... Et, franchement, je regrette qu'une taille de 1000 soit permise ; cela ne correspond à rien dans la réalité du mondes des crayons ...

ftc de 0 a 80

Place, maintenant, aux mégas testeurs : les enfants !... (Je prends des notes !...)
Maintenant que le Site XLogo est de nouveau en ligne , nous allons pouvoir parler de ses évolutions !...


Un "bon point" ! :
attribué pour le message apparaissant lorsque le crochet fermant a été oublié, message que n'avait pas PLogo, mais bien les versions originales ; ne pas oublier que Logo est tiré de Lisp.

 Page précédente

Page suivante 

 Retour Contenu Papy Logo

 Hit-Parade