Le langage Logo

L'objectif des créateurs de Logo, Papert et Minski, était d'utiliser la puissance de l'outil informatique dans les tâches d'enseignement. Plus que tout autre langage, Logo a été conçu dans le but de démystifier les ordinateurs et la programmation. Tout adepte de Logo s'oppose naturellement à l'utilisation injustifiée des jargons et à toute tendance à faire de l'informatique un domaine à part. Logo est un langage issu de Lisp. Comme lui, c'est un langage fonctionnel. Comme lui, c'est un langage interprété, ce qui permet une utilisation directe sans passer par une phase de compilation.

Cet interpréteur Logo en français, bien qu'encore inachevé, fonctionne (presque) parfaitement. Il a été écrit en Javascript et vous pourrez l'éxécuter dans tout navigateur récent, sans installation ni module externe. L'affichage 3D a été testé sur Firefox 38 et Chrome 43. Vous pourrez en télécharger le code source sur ma page Github si vous souhaitez l'adapter à vos propres besoins. Pour vous faire une idée, voici quelques exemples de procédures Logo en français.

Votre navigateur est trop ancien pour afficher correctement cette page. Vous devriez le remplacer par un navigateur plus récent.

Votre navigateur est trop ancien pour afficher correctement cette page. Vous devriez le remplacer par un navigateur plus récent.

Votre navigateur est trop ancien pour afficher correctement cette page. Vous devriez le remplacer par un navigateur plus récent.

Langage Logo en Javascript

; Programme de démonstration

Pour Spirale :n :d :s :a
  Baissecrayon
  Donne "x :d
  Repete Arrondi :n / :s [Avance :x Droite :a Donne "x :x + :s]
fin

pour Spirales
  VideEcran
  FixeCouleurCrayon [255 000 000] Spirale 200 0 1.1 53
  Attends 100 VideEcran
  FixeCouleurCrayon [000 255 000] Spirale 300 0 4 90
  Attends 100 VideEcran
  FixeCouleurCrayon [000 000 255] Spirale 500 0 3 178
  FixeCouleurCrayon [0 0 0] 
  LeveCrayon
  Origine
  FixeCap 0
  BaisseCrayon 
fin

MontreTortue
Spirales
Vitesse : Mode debug:
Tortue : Affichage :
Fond :
Gestion de la tortue Logo
CommandeAliasDescriptionExemples
AVANCE n AV n Demande à la tortue d'avancer de n pas AVANCE 10
AV 5*3
ATTENDS n Demande à la tortue de faire une pause de n/60 de secondes. attends 100
BAISSECRAYON BC Abaisse le crayon de la tortue. BC
BaisseCrayon
CACHETORTUE CTO Masque la tortue. Cto
CacheTortue
CAP Renvoie l'orientation de la tortue Montre CAP
DROITE n DR n
TD n
Demande à la tortue de pivoter de n degrés vers la droite Droite 90
TD 45
FIXECAP n Fixe le cap de la tortue (en degrés) FixeCap 90
FIXECOULEURCRAYON couleur FCC couleur Fixe la couleur du crayon. Les couleurs prédéfinies sont BLANC, BLEU, BRUN, CYAN, GRIS, JAUNE, MAGENTA, NOIR, ROUGE, VERT. FCC [ 64 128 0 ]
FixeCouleurCrayon bleu
FIXEPOS position Déplace la tortue à la position spécifiée. Une position est une liste de 2 nombres, les coordonnées X et Y. FIXEPOS [ -100 0 ]
FIXEX n Fixe la position x de la tortue FixeX 100
FIXEXY n1 n2 Déplace la tortue à la position x=n1 et y=n2 FixeXY 0 0
FIXEY n Déplace la tortue à la position y = n FixeY 100
GAUCHE n GA n
TG n
Demande à la tortue de pivoter de n degrés vers la gauche Gauche 90
Tg 45
ORIGINE Remet la tortue en son état d'origine: place la tortue au centre de l'écran et réoriente la tortue vers le haut, c'est-à-dire avec un cap de 0 degrés. Origine
RECULE n RE n Demande à la tortue de reculer de n pas Recule 10
RE 5*3
Fonctions numériques
CommandeAliasDescriptionExemples
ARRONDI n Renvoie l'entier le plus proche de n Avance ARRONDI 20/3
COS n Renvoie le cosinus du nombre passé en paramètre COS 100
DIFFERENCE n1 n2 n3... - Renvoie la différence des nombres passés en paramètres (n1 - n2 -n3...) Gauche Difference 100 45
HASARD n Renvoie un nombre aléatoire compris entre 0 et n Droite HASARD 360
LOG10 n Renvoie le logarithme de n Recule Log10 100
MOINS n - Renvoie le négatif du nombre passé en paramètre avance 10
PI Renvoie le nombre PI Droite PI
PRODUIT n1 n2 n3... * Renvoie le produit des nombres passés en paramètres (n1 * n2 * n3...) Produit 1 2 3 4 5
PUISSANCE n1 n2 ^ Renvoie n1 à la puissance n2 Recule Puissance 2 3
QUOTIENT n1 n2 / Renvoie le quotient des nombres passés en paramètre (n1 / n2) Quotient 12 4
RESTE n1 n2 % Renvoie le reste de la division entière de n1 par n2 Reste 10 3
RACINE n Renvoie la racine carrée du nombre passé en paramètre Racine 144
SIN n Renvoie le sinus du nombre passé en paramètre TG Sin 200
SOMME n1 n2 n3... + Renvoie la somme des nombres passés en paramètres Recule Somme 1 2 3 4 5
Fonctions de listes
CommandeAliasDescriptionExemples
CHOIX liste Renvoie un élément au hasard de la liste passée en paramètre. Avance Choix [ 10 20 15 12 ]
COMPTE liste Renvoie le nombre d'éléments de la liste. Montre Compte [ un petit lapin ]
DERNIER liste Renvoie le dernier élément de la liste passée en paramètre. Avance Dernier [ 10 20 15 12 ]
ENLEVE n liste Renvoie la liste sans l'élément n. Donne "lst Enleve 15 [ 10 20 15 12 ]
INVERSE liste Renvoie la liste inversée. Donne "lst Inverse [ 5 4 3 2 1 ]
ITEM n liste Renvoie le nième élément de la liste passée en paramètre. Avance Item 2 [ 10 20 15 12 ]
LISTE n1 n2 n3... Renvoie la liste composée des éléments n1, n2, n3... fcc Liste 255 0 255
METSDERNIER n liste MD n liste Place l'élément n à la fin de la liste. Donne "lst MetsDernier 5 [ 1 2 3 4 ]
METSPREMIER n liste MP n liste Place l'élément n au début de la liste. Donne "lst MetsPremier 1 [ 2 3 4 5 ]
MELANGE liste Mélange les éléments de la liste. Donne "lst Melange [ Coeur Carreau Pique Trefle ]
PREMIER liste PREM liste Renvoie le premier élement de la liste. Gauche Prem [ 45 90 135 180 225 ]
SAUFDERNIER liste SD liste Renvoie la liste sans son dernier élement. Donne "lst SD [ 1 2 3 4 5 6 ]
SAUFPREMIER liste SP liste Renvoie la liste sans son premier élement. Donne "lst SaufPremier [ 0 1 2 3 4 5 ]
VIDE? liste Renvoie VRAI si la liste est vide. Montre Vide? [ ]
Fonctions logiques et de comparaisons
CommandeAliasDescriptionExemples
EGAL? n1 n2 = Renvoie vrai si n1 = n2. Egal? 10 2*5
ET n1 n2 & Renvoie VRAI si n1 ET n2 sont vrai. ET (10>2) (2>5)
NONEGAL? n1 n2 <> Renvoie vrai si n1 est different de n2. NonEgal? 10 2*5
OU n1 n2 | Renvoie VRAI si n1 OU n2 est VRAI. OU (10>2) (2>5)
PLUSGRAND? n1 n2 > Renvoie vrai si n1 > n2. PlusGrand? 10 2*5
PLUSPETIT? n1 n2 < Renvoie vrai si n1 < n2. PlusPetit? 10 2*5
Structures de contrôle
CommandeAliasDescriptionExemples
EXECUTE liste Execute les instructions comprises dans la liste. Execute [AV 10 TD 90]
REPETE n liste Répète n fois les instructions de la liste. REPETE 4 [Avance 10 Droite 90]
SI condition liste Si la condition est VRAI execute les instructions de la liste. SI (10>2) [RE 10 TD 20]

Dans l'éditeur Logo, vous pouvez utiliser les touches Ctrl-Espace pour compléter automatiquement un mot.

Vous pouvez télécharger votre dessin à partir d'ici (en PNG) ou de là (en SVG).

A propos du langage logo et de ses applications dans l'enseignement, vous pourrez trouver d'autres informations intéressantes sur le site d' Olivier Schmidt-Chevalier. Je vous conseille également l'excellent interpréteur Logo de Joshua Bell (en anglais mais bien meilleur que le mien pour ce qui est de la vitesse d'exécution !). Ces quelques pages à propos des tortues Jeulin sont aussi très intéressantes.

Il reste encore pas mal de chose à améliorer sur cette version. Notamment la gestion des erreurs et la visualisation 3D. Si vous avez le temps, jetez un oeil sur l'affichage 3D, je pense qu'il y a des choses sympas à faire de ce côté-là.