L’espace de travail est composé de l’ensemble des éléments définis par l’utilisateur. Ceci comprend :
- Les procédures
- Les variables
- Les listes de propriétés.
Les procédures sont des sortes de « programmes ». A l’appel de leur nom, les instructions comprises dans le corps de
la procédure sont exécutées. On définit une procédure à l’aide du mot-clé pour.
pour nom_de_la_procédure :v1 :v2 :v3 .... [:v4 ....] [:v5 ....]
Corps de la procédure
fin
- nom_de_la_procédure est le nom donnée à la procédure.
- :v1 :v2 :v3 représentent les variables utilisées au sein de cette procédure (variables locales).
- [ :v4 ... ], [ :v5 ...] sont les variables optionnelles que l’on peut rajouter à la procédure. (cf explication
plus loin)
- Corps de la procédure représente les instructions à exécuter à l’appel de cette procédure.
Ex :
pour carre :c
repete 4[av :c td 90]
fin
La procédure se nomme carre et possède un paramètre s’appelant c. carre 100 produira donc un carre de côté
100. (Voir les exemples de procédures à la fin du manuel.)
Il est possible depuis la version 0.7c de rajouter des commentaires dans le code en les précédant du signe
#.
pour carre :c
#cette procédure permet de tracer un carré de côté donné :c.
repete 4[av :c td 90] # pratique, non ?
fin
Il est à présent possible dans XLogo d’utiliser une « surcharge »d’arguments. Considérons la procédure
suivante :
pour poly :n [:l 10]
repete :n [av :l td 360/:n]
fin
# Ceci trace un polygone régulier dont les 20
# côtés mesurent 10 pas de tortue
poly 20
A l’intreprétation, la variable :l est remplacée par sa valeur par défaut, c’est à dire 10. Si l’on souhaite changer
cette valeur, on doit appeler la procédure poly entre parenthèses pour signaler à l’interpréteur que l’on va utiliser
des paramètres optionnels.
# Ceci trace un polygone régulier dont les 20
# côtés mesurent à présent 5 pas de tortue
(poly 20 5)
# Ceci trace un carré dont les
# côtés mesurent 100 pas de tortue
(poly 4 100)
Il est possible pour suivre le déroulement d’un programme de lui faire afficher les procédures en cours d’exécution.
Ce mode permet d’afficher également si les procédures rendent des arguments à l’aide de la primitive retourne.
Active le mode trace
Désative le mode trace
Un petit exemple avec le factorielle (voir p. ).
trace ecris fac 4
fac 4
fac 3
fac 2
fac 1
fac retourne 1
fac retourne 2
fac retourne 6
fac retourne 24
24
Il existe deux sortes de variables :
- Les variables globales : elles sont toujours disponibles à n’importe quel endroit du programme.
- Les variables locales : elles ne sont accessibles que dans la procédure où elles ont été définies.
Dans cette version de LOGO, les variables locales ne sont pas accessibles dans les sous-procédures. A la sortie de la
procédure, les variables locales sont éliminées.
- Si la variable locale mot1 existe, lui affecte la valeur arg2
- Sinon, crée la variable globale mot1 en lui affectant la valeur arg2.
Exemple : donne “a 100 affecte 100 à la variable a
- Si arg1 est un mot, crée la variable locale nommée arg1.
- Si arg1 est une liste, se sert de tous les éléments de la liste pour créer des variables locales.
Pour lui donner une valeur, voir soit.
donnelocale, soit mot1 arg2 |
|
Crée une nouvelle variable locale mot1 et lui affecte la valeur arg2.
Définis une nouvelle procédure nommée mot1.
liste1 contient une série de listes :
- La première de ces listes contient les variables de la procédure ainsi que le variables optionnelles.
- Chacune des listes suivantes représente une ligne de la procédure.
def "polygone [ [nb longueur] [repete :nb[av :longueur td 360/:nb]]]
Ceci définit une procédure nommée polygone avec deux variables ( :nb et :longueur). Elle permet de
tracer un polygône régulier dont on peut choisir le nombre de côtés et la longueur de chacun des côtés.
Renvoie toutes les information sur la procédure appelée mot1. Elle retourne une liste contenant plusieurs
listes.
- La première de ces listes contient les variables de la procédure mot1.
- Les listes suivantes représentent chacune des lignes de la procédure.
Cette primitive est bien sûr associée à la primtive definis.
Renvoie la valeur de la variable mot1.
chose "a et :a sont deux notations équivalentes.
Renvoie une liste contenant l’ensemble des procédures actuellement définies.
Renvoie une liste contenant l’ensemble des variables actuellement définies.
Renvoie une liste contenant l’ensemble des listes de propriétés actuellement définies.
Renvoie une liste formées de trois autres listes. La première contient toutes les procédures définies, la seconde toutes
les variables et la dernière toutes les listes de propriétés.
Renvoie une liste contenant toutes les primitives connues.
effaceprocedure, efp arg1 |
|
Efface la procédure s’appelant arg1, ou toutes les procédures contenues dans la liste arg1.
Efface la variable arg1 ou toutes les variables contenues dans la liste arg1.
effacelisteproprietes, eflp arg1 |
|
Efface la liste de propriétés nommée arg1 ou toutes les listes de propriétés contenues dans la liste
arg1.
Efface toutes les variables, listes de propriétés et procédures définies dans l’esapce de travail.
Quitte XLOGO.
Exécute la liste d’instruction contenue dans liste1.
Permet d’exécuter une commande système depuis XLogo. liste1 doit contenir plusieurs listes contenant chacune les
mots constituant la commande. Quelques exemples :
commandeexterne [[gedit][/home/xlogo/fichier.txt]]
Lance l’application gedit et charge le fichier /home/xlogo/fichier.txt (Linux)
commandeexterne [[notepad][C: /fichier.txt]]
Lance l’application notepad et charge le fichier nommé C: /fichier.txt (Windows)
Cette syntaxe un peu particulière permet notamment l’utilisation d’espaces dans les chemins de fichiers.
A partir de la version 0.9.92, XLogo supporte les listes de propriétés. Chaque liste a un nom principal et est
composée d’un ensemble de paires Clé-Valeur.
Par exemple, considérons une liste de propriétés nommée « voiture ». Elle peut contenir par exemple la clé
« couleur » associée à la valeur « rouge », ou encore la clé « type » associée à la valeur « décapotable ».
Pour manipuler ces listes, nous disposons des primitives suivantes :
dprop donnepropriete nom clé valeur |
|
Considère la liste de propriétés nom (Si elle n’existe pas, la crée). Elle y ajoute l’élémet valeur qui sera accessible à
l’aide du mot clé.
rprop rendspropriete nom clé |
|
Récupère dans la liste de propriétés nom la valeur associée à la clé désirée. Si la liste de propriétés n’existe pas ou si
la clé n’existe pas, retourne une liste vide.
efprop effacepropriete nom clé |
|
Dans la liste de propriétés nom, efface la valeur associée à la clé choisie.
Affiche l’ensemble des couples clé-valeur contenue dans la liste de propriétés nom.
Reprenons l’exemple de la liste « voiture ».
# Remplissage de la liste
dprop "voiture "couleur "rouge
dprop "voiture "type "décapotable
dprop "voiture "marque "Citroën
# Affichage d’une valeur particulière
ecris rprop "voiture "couleur
rouge
# Affichage de tous les éléments
ecris lprop "voiture
couleur rouge type décapotable marque Citroën