dimanche 31 mai 2015

Il existe de nombreuses version du langage Logo. Depuis la toute première, qui fonctionnait sur un ordinateur PDP 10 de la société Digital Equipment Corporation, jusqu'aux excellents MSWLogo, Xlogo, Kturtle ou Logo3D. On trouve aussi quelques versions en Javascript comme Papert et surtout celle développée par Joshua Bell.

Toutes ces versions exploitent surtout l'aspect graphique de Logo. Elles ajoutent des primitives au langage (pour dessiner des cercles, des triangles) ou transforment la traditionnelle tortue en une créature étrange capable de se mouvoir dans toutes les directions (y compris en hauteur) et de tracer des lignes dans l'espace.

J'ai essayé, en développant mon interpréteur Logo de rester aussi fidèle que possible aux versions originales du langage. Un dessin comme celui ci-dessous ne nécessite que quelques primitives de gestion de liste ou de déplacement de la tortue.


Idem pour un arbre récursif tel que celui-ci :


Cependant, je fais partie de ces types qui ont appris la programmation en faisant bouger des trucs à l'écran. Pour moi, l'intérêt de Lego réside moins dans sa capacité à faire de jolis dessins que dans celle de faire se mouvoir une tortue (ou du moins un engin qui ressemble vaguement à une tortue). Si je tape "AVANCE 10" je m'attends à voir la tortue se déplacer plus ou moins lentement de 10 pas et non se retrouver instantanément 10 pixels plus loin. Aussi, dans ma version de Logo, j'essaie de faire se comporter la tortue comme si elle était un petit automate.

Cela m'a ammené à faire quelques petites modifications dans le langage. Par exemple, si je tape "AVANCE 10" et qu'au bout de 5 pas la tortue rencontre un obstable, elle s'arrête. De plus, si je tape "AVANCE 10" et que la tortue fait 10 pas, elle me renvoie la valeur "10". Si elle n'a put faire que 6 pas, elle me renverra la valeur "6". On peut donc écrire des instructions du genre : "DONNE "dist AVANCE 10". 

Une autre perspective offerte par cette manière de voir est de programmer une tortue en 3D, un peu comme dans un jeu vidéo. Ou bien d'ajouter sur la scène des objets fixes (comme des murs par exemple) ou mobile (comme des ballons ou même d'autres tortues) et faire interagir la tortue avec ces objets.

Pour l'instant le développement n'en est qu'au tout début mais j'espère avoir quelque chose de plus conséquent à proposer rapidement. La prochaine étape consistera à permettre l'ajout de "murs" pour la construction d'un labyrinthe.

Le code source est disponible sur Github. Vous pouvez le modifier, le traduire, l'améliorer, le compléter... comme vous voulez.