Chapitre 6
Introduction au LOGO
L'objectif de ce chapitre est de vous faire prendre
contact avec LOGO. Assorti d'exemples, il est complété
d'un guide des commandes disponibles mais n'est ni un cours
exhaustif, ni un guide de référence. Il existe pour
cela toute une série de publications AMSOFT et d'autres
ouvrages.
Sujets abordés:
Qu'est-ce que le LOGO?
Le LOGO peut vous aider à devenir un programmeur, que vous ayez ou non des notions d'informatique. C'est un langage puissant qui devient de plus en plus populaire en raison de sa simplicité.
Vous vous servez de « procédures » pour construire les différentes parties de votre programme. Le Dr. LOGO a sa propre collection de « procédures » appelées « primitives » que vous utiliserez également pour programmer.
Dans les années 70. une équipe de chercheurs en informatique et d'éducateurs dirigés par Seymour Papert mit au point le LOGO et sa petite tortue graphique pour permettre à de très jeunes enfants de programmer un ordinateur. La tortue est pour ces jeunes apprentis. comme le dit Papert, un « objet pour penser ». un outil pour apprendre d'une façon différente. En forme de tète de flèche, elle peut être déplacée sur l'écran à l'aide de commandes simples.
Dr. LOGO
Le Dr. LOGO est une version très élaborée du LOGO. Elle a été spécialement adapté à l'ordinateur individuel AMSTRAD afin de le rendre encore plus simple à programmer. Des extensions ont permis d'y inclure la possibilité d'utiliser les puissantes facultés sonores du CPC6128 tandis que la correction des programmes est facilitée par le pavé de gestion du curseur.
Préparons-nous
Pour mettre en service le Dr. LOGO, insérez une copie de la face 1 d'une des disquettes système dans l'unité de disquette et tapez:
|cpm
Lorsque le message A > apparait, retirez la disquette et insérez une copie de la face 3 (DR LOGO & HELP).
Pour lancer le Dr. LOGO, tapez:
SUBMIT LOGO3
Au bout dc quelques secondes, un message de bienvenue s'affiche, suivi d'un point d'interrogation.
|
Dr. LOGO sous CP/M 2.2 Remarque La version du Dr. LOGO stockée sur la face 4 d'une des disquettes système a été prévue pour une utilisation du Dr. LOGO sous CP/M 2.2 (sur AMSTRAD CPC664 ou CPC464+ DDI1 ). Elle n'est donc pas recommandée sur le CPC6128. La face 3 contient toutes les spécifications du Dr. LOGO de Digital Research. Si vous préférez malgré tout utiliser la version CP/M 2.2 du Dr. LOGO, insérez dans l'unité une copie de la face 4 d'une des disquettes système et tapez : |CPM Lorsque A > apparait. tape SUBMIT LOGO2 Au bout de quelques secondes s'affiche un message de bienvenue, suivi d'un point d'interrogation. |
Les premiers pas
Le point d'interrogation vous indique que Dr. LOGO est prêt à recevoir vos instructions au clavier.
Essayez de taper en minuscules :
fd 60 [RETURN]
... et vous verrez apparaître une tortue (une flèche grand format) qui avancera de 60 unités en laissant un trait derrière elle. L'écran va se restructurer en ménageant une zone importante pour le graphique et un emplacement plus petit pour le texte (?) en bas de l'écran.
Dr. LOGO décide souvent de changer l'organisation de l'écran avec soit une grande zone pour le texte, soit une grande zone pour le graphisme, selon votre besoin.
Tapez :
rt 90 [RETURN]
... et la tortue bouge de 90 degrés vers la droite.
Maintenant tapez:
fd 60
...et une autre ligne se dessine de la même longueur que la première et à angle droit.
Entraînez-vous avec les instructions fd, bk (back : arrière) rt et lt (left : gauche), pour voir ce qui se passe sur l'écran.
Les « procédures» de Dr. LOGO
Une procédure est une liste d'instructions accomplissant un certain travail. Vous allez sûrement écrire vos premières procédures en utilisant les instructions de Dr. LOGO appelées « primitives ».
fd, bk, rt et lt sont des primitives de Dr. LOGO utilisables à tout moment pour construire vos propres « procédures ». Une autre primitive très utilisée est cs, qui nettoie l'écran et renvoie la tortue à la case de départ.
L'élaboration d'une procédure simple
Vous pouvez également constater que si la formule
fd 60 rt 90
...est répétée 4 fois, elle dessine un carré de 60 unités de côté.
Vous pouvez obtenir le même résultat en écrivant très simplement:
repeat 4 [fd 60 rt 90]
Videz l'écran et tapez la formule pour voir ce qui se passe.
Pour faire de cette formule une nouvelle procédure, appelée « carre », tapez
to carrerepeat 4 [fd 60 rt 90]
end
Dr. LOGO comprend maintenant « carre » et, chaque fois qu'il le rencontrera, il tracera un carré sur l'écran. Nous aurions pu donner n'importe quel nom à notre procédure, mais « carre » est un bon moyen pour s'en souvenir.
Dr. LOGO nous permet de taper toutes sortes de combinaisons du style : carre rt 45 carre, qui va dessiner 2 carrés, le second ayant un angle de 45 degrés par rapport au premier.
Procédures avec paramètres
Il est possible de bâtir des procédures auxquelles nous pourrons demander « combien », de même que pour les primitives. Pour bâtir une procédure qui va construire des carrés de n'importe quelle taille, nous allons redéfinir « carre »
to carrequelconque :coterepeat 4 [fd :cote rt 90]
end
Vous remarquerez que la variable :cote est précédée de 2 points qui indiquent à Dr. LOGO que :cote est une variable et non pas une commande.
Lorsque nous utiliserons la procédure carrequelconque, :cote doit recevoir une valeur. Ainsi, carrequelconque 150 donnera un carré de 150 unités de côté.
Essayons de combiner 2 procédures pourvoir ce qu'il advient. Par exemple, à partir d'une instruction
cs carrequelconque 100 rt 45 carrequelconque 150
la tortue va dessiner 2 carrés de côtés différents, l'un faisant un angle de 45 par rapport l'autre.
Notez comment Dr. LOGO utilise un point d'exclamation ! pour vous rappeler qu'une ligne de commandes s'est divisée en plusieurs lignes sur l'écran.
Utilisation de variables pour stocker des valeurs
Dr. LOGO vous permet d'utiliser des variables pour stocker des valeurs et en transmettre à une procédure.
Elaborez tout d'abord une procédure appelée triangle:
to trianglerepeat 3 [fd :bord rt 120]
end
Vous pouvez tester ceci en tapant .
make "bord 100triangle
Si nous voulons connaître la valeur du bord, nous entrons :bord après le? et Dr. LOGO nous affiche sa valeur
Enfin, nous pouvons utiliser notre variable :bord dans une nouvelle procédure afin de construire un dessin. Remarquez comment la valeur de :bord est augmentée de façon a agrandir notre dessin a chaque passage.
to dessintriangle lt 60 triangle rt 60
make "bord :bord+4
dessin
end
make "bord 10
cs dessin
Quand vous en aver assez, appuyez sur [ESC] pour arrêter le programme.
La correction des programmes et des procédures
Dr. LOGO vous permet de corriger les fautes de frappe et de modifier les procédures que vous avez définies. Les touches utilisées pour la correction sont:
Les touches curseur ñòïð pour le déplacement du curseur d'un caractère ou d'une ligne à la fois.
Les touches curseur ñòïð combinées à la touche [CONTROL] pour se déplacer d'une extrémité de l'écran à l'autre.
[CLR] efface le caractère sous le curseur. [DEL] efface le caractère a gauche du curseur.
[RETURN] indique au Dr. LOGO que la correction d'une ligne de commande est terminée ou bien donne la ligne suivante lors de la correction d'une procédure.
[ESC] signifie fin de correction et [COPY] signale au Dr. LOGO que la correction de la procédure est terminée.
Quand vous entrez des commandes ou de nouvelles procédures, corrigez le texte en face de vous sur l'écran. Tout autre caractère que ceux mentionnés plus haut est inséré dans le texte à la position du curseur.
Pour la correction d'une procédure existante, utilisez la commande ed.
Dr. LOGO affiche alors l'ancienne version de la procédure sur l'écran et vous permet d'effectuer ainsi vos modifications à l'aide des commandes de gestion du curseur.
Essayez la correction de la procédure dessin en tapant ed`` dessin
Servez-vous des touches de correction. Quand vous avez terminé, appuyez sur la touche [ESC]. Dr. LOGO abandonne alors le mode correction et vous redonne la version originale inchangée de votre procédure.
Tapez ed`` dessin à nouveau puis changez le 4 en 8, appuyez sur la touche [COPY] pour sortir et lancez la procédure pour visualiser le graphique résultant. N'oubliez pas de donner une valeur à :bord.
Quelques mots sur le fonctionnement
L'espace de travail utilisé par Dr. LOGO est divisé en noeuds. Vous pouvez savoir combien il vous en reste en tapant :
nodes
Parfois, lorsque presque tous les nceuds sont utilisés, Dr. LOGO fera le ménage de l'espace de travail et la tortue fera une pause. On peut aussi demander à Dr. LOGO de faire ce nettoyage par la commande :
recycle
Ceci pour vous permettre de continuer après que Dr. LOGO se soit plaint de n'avoir plus de nouds disponibles.
Si vous utilisez la version CP/M 2.2 du Dr. LOGO (face 4). assurez-vous, avant de lancer Dr. LOGO, qu'il y a suffisamment de place sur votre disquette pour vous permettre de sauvegarder vos procédures. Utilisez la commande CAT d'AMSDOS (voir la partie 7 du Cours Élémentaire).
Jetez un coup d'oeil sur les paragraphes suivants et essayez quelques exemples. Vous ne comprendrez pas tout la première fois, mais plus vous avancerez dans votre apprentissage de Dr. LOGO, plus vous utiliserez de commandes différentes.
Quand vous avez terminé avec Dr. LOGO, tapez :
bye
Liste des primitives de Dr. LOGO
Ce paragraphe dresse la liste alphabétique des primitives du Dr.LOGO par groupes, en donnant la forme syntaxique, parfois accompagnée d'un exemple.
Les commandes accompagnées d'un astérisque ne sont pas disponibles avec la version CP/M 2.2 du Dr. LOGO (face 4 d'une des disquettes système) et les programmes exploitant ces commandes ne seront donc pas compatibles avec les CPC664 et CPC464 + DDI1 sous CP/M 2.2.
TRAITEMENT DE MOTS ET DE LISTES
(Vous remarquerez les symboles ? et > dans les exemples suivants)
ascii
Donne la valeur ASCII du premier caractère de mot entré.
?ascii "G71
?ascii "g
103
bf
(but first = sauf le premier) Donne un objet sans son premier élément.
?b4 "prendrerendre
?bf [1 2 3]
[2 3]
bl
(but last = sauf le dernier) Donne un objet sans son dernier élément.
?bl "prendreprendr
?bl [1 2 3 4]
[1 2 3]
char
Donne le caractère qui correspond à la valeur ASCII entrée.
?char 83S
count
Donne le nombre d'éléments de l'objet entré.
?count "six3
?count [0 1 2 3]
4
emptyp
Répond TRUE (vrai) si l'objet entré et un mot ou une liste vide. Dans le cas contraire répond FALSE (faux).
?emptyp "TRUE
?emptyp []
TRUE
?emptyp [x]
FALSE
?make "x []
?emptyp :x
TRUE
first
(premier) Donne le premier élément de l'objet entré et supprime les crochets de la liste.
?first "zebrez
?first [1 2 3]
1
fput
(first put = met devant) Donne un nouvel objet en ajoutant le premier élément entré juste devant le deuxième.
?fput "p "rendreprendre
?fput 1 [2 3]
[1 2 3]
item
(article) Donné l'élément du rang spécifié.
?item 4 "manuelu
*
last
Donne le dernier élément de l'objet entré (comparez avec FIRST).
?last "caniball
*
lc
Donne le mot entré avec tous les caractères alphabétiques en minuscules (voir également FIRST).
?lc "GRENIERgrenier
list
Donne la liste des éléments entrés en les encadrant de crochets (à comparer avec la primitive se).
?(list 1 2 3 4)[1 2 3 4]
?list "peau [rouge]
[peau [rouge]]
?(list)
[]
*
listp
Répond TRUE (vrai) si l'objet entré est une liste. Dans le cas contraire. répond FALSE (faux).
?listp "mereFALSE
?listp [pere frere soeur]
TRUE
*
lput
« lastput = mettre en dernier » Donne un nouvel objet en ajoutant le premier élément entré à la suite du deuxième.
?lput "s "plurielpluriels
?lput "s [pluriel]
[pluriel s]
*
memberp
Répond TRUE (vrai) si le premier élément entré est un élément du deuxième objet entré.
?memberp "y "ElyseeTRUE
?memberp "chocolat [[vanille][chocolat][fraise]]
FALSE
?memberp [chocolat] [[vanille][chocolat][fraise]]
TRUE
*
numberp
Répond TRUE (vrai) si l'objet entré est un nombre.
?numberp 374.926TRUE
?numberp "six
FALSE
''numberp first [2 4 6 8]
TRUE
*
piece
Donne un objet contenant les élément spécifiés dans l'objet entré.
?piece 4 7 "fenetresetre
?piece 2 4 [francois daniel herve olivier frederic]
[daniel herve olivier]
se
(sentence = phrase) Donne la liste des éléments entrés en supprimant les crochets (à comparer avec list).
?make "instr_list rlrepeat 4 [fd 50 rt 90]
?run (se "cs :instr list "ht)
Remarque : Le tiret s'obtient en actionnant [SHIFT]0.
*
shuffle
Donne une liste contenant les éléments de la liste entrée dans un ordre aléatoire.
?shuffle [a b c d][c b d a]
*
uc
Donne le mot entré avec ses caractères alphabétiques en majuscules (comparer avec lc).
?uc "JonesJONES
*
where
Donne un nombre calculé à partir de l'expression membcrp vraie la plus récente.
?memberp "v "riviereTRUE
?show where
3
word
(mot) Donne un seul mot à partir des mots ou éléments entrés.
?word "tele "visiontelevision
wordp
Donne la réponse TRUE (vrai) si l'objet entré est soit un mot, soit un nombre.
?wordp "bonjourTRUE
?wordp []
FALSE
Opérations arithmétiques:
*
arctan
Donne l'arc-tangente (en degrés) du nombre entré.
?arctan 00
?arctan 1
45
cos
Donne le cosinus du nombre entré en degrés.
?cos 600.500000000017049
int
Donne la partie entière du nombre entré.
?int 4/31
*
quotient
Donne le résultat de la division entière des deux nombres entrés.
?quotient 14 43
?14/4
3.5
random
Donne un nombre entier positif pris au hasard et inférieur au nombre entré.
?random 20
*
remainder
Donne le résultat entier du quotient du premier nombre entré par le second.
?remainder 7 31
?remainder 8 4
0
*
rerandom
Provoque la répétition d'une expression aléatoire.
?repeat 10 [(type random 10 char 9)]3 7 5 3 2 0 4 2 6
?repeat 10 [(type random 10 char 9)]
9 9 1 0 6 1 3 5 1
?rerandom
?repeat 10 [(type random 10 char 9)]
2 9 0 3 1 6 2 3 7
?rerandom
?repeat 10 [(type random 10 char 9)]
2 9 0 3 1 6 2 3 7
*
round
Donne le nombre entre arrondi a l'entier immédiatement supérieur.
?round 3.33333333
?round 3.5
4
sin
Donne le sinus du nombre entré en degrés.
?sin 300.500000000017049
+
Donne la somme des nombres entrés.
?+ 2 24
?2+2
4
-
Donne la différence des deux nombres entrés.
?- 10 55
?10-5
5
*
Donne le produit des deux nombres entrés.
?* 4 624
?4*6
24
/
Donne le quotient décimal des deux nombres entrés.
?/ 25 55
?25/5
5
Opérations logiques:
and
(et) Répond TRUE (vrai) si le résultat de toutes les expressions entrées est vrai.
?and (3<4) (7>4)TRUE
not
Répond TRUE (vrai) si l'expression entrée est fausse.
Répond FALSE (faux) si l'expression entrée est vraie.
?not (3=4) TRUE?not (3=3) FALSE
or
(ou) Répond FALSE (faux) si toutes les expressions entrées sont fausses.
?or "TRUE "FALSETRUE
?or (3=4) (1=2)
FALSE
=
Répond TRUE (vrai) si les deux expressions entrées sont équivalentes; sinon répond FALSE (faux).
?= "LOGO "LOGOTRUE
?1=2
FALSE
>
Répond TRUE (vrai) si le premier élément entré est plus grand que le second ; sinon répond FALSE (faux).
?> 19 20FALSE
?20>19
TRUE
<
Répond TRUE (vrai) si le premier élément entré est plus petit que le second ; sinon répond FALSE (faux).
?< 27 13FALSE
?13<27
TRUE
Variables:
local
Rend les variables données accessibles uniquement à la procédure en cours.
>(local "x "y "z)
make
Pour donner une valeur à une variable.
?make "cote 50?:cote
50
*
namep
Répond TRUE (vrai) si le mot entré identifie une variable définie.
?make "gout "chocolat?:gout
chocolat
?namep "gout
TRUE
?namep "chocolat
FALSE
thing
Donne la valeur de la variable entree sous forme de nom
?make "ordinateur "amstrad?thing "ordinateur
amstrad
Procédures:
*
define
Construit la procédure définie par la liste et portant le nom spécifié.
?define "dire.bonjour [[] [pr "bonjour]]?po "dire.bonjour
to dire.bonjour
pr "bonjour
.text "dire.bonjour
[[] [pr "bonjour]]
end
end
Indique la lin de la procédure. Doit être isolé au début de la dernière ligne de la procédure.
?to carre>repeat 4 [fd 50 rt 90]
>end
carre defined (carre defini)
?carre
Po
(print out = affichage) Affiche sur l'écran la procédure désignée ou la valeur des variables spécifiées.
?po "carreto carre
repeat 4 [fd 50 rt 90]
end
?po "x
x is 3 (x est 3)
pots
(print out titles = affichage des titres) Affiche les titres de toutes les procédures de l'espace de travail.
?pots
*
text
Donne la liste de la procédure spécifiée.
?to etoile ;cinq branches>repeat 5 [fd 30 rt 144 fd 30 lt 72]
>end
etoile defined
?text "etoile
[[] [repeat 5 [fd 30 rt 144 fd 30 lt 72]]]
to
Indique le début de la construction d'une procédure.
?to carre>repeat 4 (fd 50 rt 90]
>end
carre defined
Correction:
ed
Charge sur l'écran la procédure et/ou les variables désignées dans la mémoire d'édition de l'écran.
?ed "carre
*
edall
Charge sur l'écran toutes les variables et procédures de l'espace de travail désignées dans la mémoire d'édition de l'écran et entre l'éditeur d'écran.
?edal
*
edf
Charge directement dans la mémoire d'édition de l'écran le fichier spécifié, ou crée un nouveau fichier en entrant l'éditeur d'écran avec une mémoire vide,
?edf "etoile
Fonctions d'imprimante
*
copyon
Provoque l'impression du texte par écho.
?copyon
*
copyoff
Arrête l'impression du texte par écho.
?copyoff
Ecran texte
ct
(clear text = vidage du texte) Efface tout le texte de la fenêtre où se promène le curseur et ramène le curseur en haut à gauche de celle-ci.
?ct
*
cursor
Donne les coordonnées du curseur dans la fenêtre texte (numéro de colonne, numéro de ligne).
?ct?cursor
[0 1]
?(type [la position actuelle du curseur est\] show cursor
la position actuelle du curseur est [32 23]
pr
(print = affiche) Affiche les objets entrés au clavier sur l'écran texte, enlève les crochets d'une liste et va à la ligne (à comparer avec show et type).
?pr [a b c]a b c
*
setcursor
Place le curseur aux coordonnées spécifiées.
?ct?to dessin
>make "x random 20
>make "y random 12
>setcursor list :x :y pr "*
>end
?dessin
setsplit
Délimite le nombre de lignes de l'écran texte.
?setsplit l0
show
Affiche les objets entrés au clavier sur l'écran texte, garde les crochets extéricurs d'une liste et va à la ligne (à comparer avec pr et type).
?show [a b c][a b c]
ts
(text screen = écran texte) Réserve tout l'écran pour le texte.
?ts
type
Affiche les objets entrés au clavier sur l'écran texte, enlève les crochets d'une liste et ne va pas à la ligne (à comparer avec pr et show).
?type [a b c]a b c
L'écran graphique
Notez que l'écran est en mode 1, à 4 couleurs, et que le système de coordination est le même que celui du BASIC AMSTRAD. En d'autres termes, chaque position sur l'écran sera arrondie au point écran ayant le numéro pair le plus proche. Les quantités de rouge, de vert et de bleu pourront varier entre 0, 1 ou 2.
clean
(to clean = nettoyer) Efface tout l'écran graphique sans toucher à la tortue.
?fd 50?clean
cs
(clear screen = vide l'écran) Efface l'écran graphique et ramène la tortue en position [0,0] tournée vers 0 (le nord) et avec le stylo baissé.
?rt 90 fd 50?cs
dot
Place un point sur l'écran à la position spécifiée par les coordonnées indiquées et selon la couleur de stylo en cours.
?dot [50 10]
*
dotc
Donne le numéro de la couleur du point spécifié par les coordonnées, ou -1 si le point n'est pas à l'écran.
?cs?setpc 1
?dot -50 50
?setpc 2
?dot 50 50
?setpc 3
?dot 50 -50
?dotc 50 50
2
?dotc -50 -50
0
?dotc 1000 3000
-1
fence
(barrière) Pose une barrière qui empêche la tortue de sortir des limites de l'écran. window enlève cette barrière.
?fence?fd 300
Turtle out of bounds (la tortue est hors des limites)
*
fill
Peint une zone dans la couleur du stylo en cours en changeant le point situé sous la tortue et tous les points contigus horizontaux et verticaux en utilisant l'état du stylo en cours.
?make "x 5?cs
?st
?pd
?repeat 30 [fd :x rt 90 make "x :x + 5]
?fd 20 rt 90
?fd 10
?pu
?home
?bk 2
?pd
?setpc 2
?fill
fs
(full screen = plein écran) Réserve la totalité de l'écran au graphique.
?fs
pal
(palette) Donne les trois nombres représentant les quantités de rouge, vert, bleu du stylo.
?pal 2[0 2 2]
*
setbg
Change la couleur de fond de l'écran graphique en fonction du numéro de couleur spécifié.
?sf[0 SS 5 FENCE 1]
(cette instruction définit le fond à la couleur 0)
?pal 0[0 0 1]
?setbg 2
?sf
[2 SS 5 FENCE 1]
setpal
(set palette = fabrication des couleurs) Les trois chiffres assignent les quantités de rouge, de vert, de bleu du stylo.
?setpal 3 [1 1 2]?pal 3
[1 1 2]
*
setscrunch
Donne au rapport de l'écran graphique la valeur du nombre spécifié.
?sf[0 SS 5 FENCE 1]
?to cercle
>repeat 360 [fd 1 rt 1]
>end
cercle defined
?setscrunch 2
?sf
[0 SS 5 FENCE 2]
?cercle
?setscrunch 2.5
?cercle
sf
(screen facts = les données de l'écran) Affiche des informations sur l'état de l'écran graphique. La structure de ces informations est :[<couleur de fond> <état de l'écran> <longueur de l'écran texte> < fenêtre> <scrunch>] où < couleur de fond> est la couleur du stylo de fond (toujours 0 sous CP/M 2.2). <état de l'écran > indique SS (split screen = écran partagé), FS (full screen.= plein écran) ou TS (text screen = écran totalement réservé au texte). < longueur de l'écran texte> est le nombre de lignes réservé au texte, et < fenêtre > indique WINDOW (pas de barrière, la tortue peut sortir), WRAP (réapparition de la tortue de l'autre côté de l'écran) ou FENCE (barrière - la tortue ne peut pas sortir des limites de l'écran). < scrunch >, le rapport d'écran (non disponible sous CP/M 2.2), est toujours égal à l par défaut et peut être modifié par SETSCRUNCH.
?sf[0 SS 5 FENCE 1]
ss
(split screen = écran partagé) Réserve au texte une fenêtre sur l'écran graphique.
?ss
window
Permet à la tortue de sortir des limites de l'écran après un wrap ou un fence.
?fence fd 300Turtle out of bounds
?window
?fd 300
wrap
Fait apparaître la tortue du côté opposé à celui où elle sort.
?cs wrap?rt 5 fd 1000
? cs window
?rt 5 fd 1000
Les graphismes de la tortue:
bk
(back = arrière) Déplace la tortue du nombre de pas indiqué dans la direction opposée au sens de la flèche.
?cs fd 150?bk 50
fd
(forward = avant) Avance la tortue du nombre de pas indiqué dans le sens de la flèche.
?fd 80
Home
Replace la tortue au centre de l'écran graphique, position [O O], tournée vers 0 (le nord).
?fd 100?rt 45
?fd 100
?home
ht
(hide turtle = cache tortue) Rend la tortue invisible. Accélère et clarifie le dessin.
?ht?cs fd 50
?st
lt
(left = gauche) La tortue tourne du nombre de degrés indiqué vers la gauche.
?lt 90
pd
(pen down = stylo baissé) Le stylo est posé sur le papier et la tortue peut recommencer à tracer après interruption par la primitive pu.
?fd 20 pu fd 20?pd
?fd 20
pe
(pen erase = stylo qui efface) Cette instruction transforme la couleur du stylo en 0, c'està-dire la couleur du fond, et permet ainsi d'effacer les traits sur l'écran.
?fd 50?pe
?bk 25
?fd 50
?pd fd 25
pu
(pen up = stylo levé) Le stylo est levé, ne laissant plus de trace sur l'écran.
?fd 30?pu
?fd 30
?pd fd 30
px
(pen exchange = stylo inversé) Change la couleur de tout ce qui a été tracé auparavant en sa couleur opposée ou logiquement complémentaire.
?fd 20 pu fd 20?pd setpc 3 fd 20
?px
?bk 80
?fd 80
?pd bk 100
rt
(right = droite) La tortue tourne du nombre de degrés indiqué vers la droite.
? rt 90
seth
(set heading = changement de direction) Tourne la tortue dans la direction spécifiée en degrés. Les nombres positifs font tourner la tortue dans le sens des aiguilles d'une montre, les nombres négatifs en sens inverse.
?seth 90
setpc
(set pen coulour = changement de la couleur du stylo) Le stylo prend la couleur indiquée par le nombre donné (0 est la couleur du fond).
?setpc 1
setpos
(set position = changement de position) Envoie la tortue â la position indiquée par les coordonnées spécifiées.
?setpos [30 20]
*
setx
Change la position horizontale (le la tortue en fonction de la coordonnée r spécifiée (voir également sety).
?setx 80?fd 100
?setx -50
?fd 50
*
Sety
Change la position verticale de la tortue en fonction de la coordonnée y spécifiée.
?sety 90?fd 20
?sety -50
?fd 50
St
(show turtle = montre tortue) Pour rendre visible à nouveau une tortue invisible.
?ht?fd 50
?st
tf
(turtle facts = données de la tortue) Affiche une liste d'informations concernant la tortue. Le format est : [<coordx> <coordy> <direction> <état du stylo> <couleur du stylo n > < visibilité>] où < coordx > est la coordonnée x de la tortue ; < coordy > est la coordonnée y de la tortue ; <direction> indique la direction vers laquelle se tourne la tortue (en degrés) ; < visibilité> est TRUE (vrai) lorsque la tortue est visible ; <état du stylo> indique PD (pen down = stylo baissé), PE (pen erase = stylo qui efface), PX (pen exchange = stylo inversé), PU (pen up = stylo levé) ; < couleur du stylo n > identifie le numéro de la couleur du stylo n.
?setpos [15 30]?rt 60
? setpc 3
?pe
?ht
?tf
[15 30 60 FE 3 FALSE]
*
towards
Donne une direction qui pointe la tortue vers les coordonnées spécifiées.
?seth towards list :x :y
Gestion de l'espace de travail:
er
(erase=efface) Efface la procédure spécifiée de l'espace de travail.
?er "carre
*
erall
Efface toutes les procédures et les variables de l'espace de travail.
?erall
ern
(erase name=efface le nom) Efface la ou les variables spécifiées de l'espace de travail.
?make "cote [100]?make "angle [45]
? :cote :angle
[100]
[45]
?ern [cote angle]
?:cote
cote has no value (cote ne vaut rien)
nodes
Affiche le nombre de noeuds disponible dans l'espace de travail.
?nodes
*
noformat
Supprime de l'espace de travail le formatage de la procédure et les commentaires afin de libérer des noeuds.
?noformat
*
poall
Affiche les noms et les valeurs de toutes les variables de l'espace de travail.
?poall
*
pons
Affiche les noms et les valeurs de toutes les variables globales de l'espace de travail.
?ponsmedium is 40
small is 20
large is 80
*
pops
Affiche les noms et les définitions de toutes les procédures de l'espace de travail.
?pops
recycle
Libère le plus de noeuds possible et réorganise l'espace de travail.
?recycle?nodes
Listes de propriété:
glist
(get list=donne la liste) Permet d'obtenir une liste de tous les objets de l'espace de travail auxquels on a attaché une ou des propriétés.
?glist ".DEF
gprop
(get property= donne la propriété) Permet d'obtenir une liste de tous les objets de l'espace de travail.
?make "hauteur "72?gprop "hauteur ".APV
72
plist
(property list=liste des propriétés) Permet d'obtenir la liste des propriétés attachées à un mot.
?plist "hauteur[.APV 72]
pprop
(put property= donne une propriété) Permet de créer un lien entre un mot et une propriété.
?pprop "maitre ".APV "Corbeau?:maitre
Corbeau
*
pps
Affiche les paires de propriétés non standard de tous les objets de l'espace de travail.
?pprop "Helene "telephone 213256?pps
Helene's telephone is 213
?plist "Helene
[telephone 2132256]
remprop
remove property= élimine la propriété) Elimine la propriété spécifiée de la liste de propriété du mot.
?remprop "maitre ".APV
Fichiers sur disquette:
*
changef
Change le nom d'un fichier du catalogue de la disquette.
?dir[CERCLE CARRE ETOILE]
?changef "boite "carre
?dir
[CERCLE BOITE ETOILE]
*
defaultd
Donne le nom de l'unité par défaut en cours.
?defaultdA:
dir
(directory=catalogue) Permet d'obtenir une liste de noms de fichiers en Dr. LOGO présents sur une disquette, soit spécifiée, soit prise par défaut; accepte également les jockers.
?dir "a:????????
(Etudiez la partie 1 du chapitre intitulé " AMSDOS et CP/M" pour l'utilisation des jockers???????? Dr. LOGO ne tient toutefois pas compte du jocker *.)
*
dirpic
Donne une liste des noms de fichiers graphiques de l'unité par défaut ou spécifiée. Accepte les noms de fichiezrs ambigus.
?dirpic "b:[MON_DESS CARRES ETOILES CERCLES]
load
Charge le fichier spécifié, de la disquette sur l'espace travail de l'ordinateur.
?load "monfichier?load b:dessins
*
loadpic
Recrée sur l'écran graphique le dessin sauvegardé dans le fichier graphique spécifié.
?loadpic "mon_dess?loadpic "b:mon_dess
save
Ecrit le contenu de l'espace travail dans un fichier sur la disquette spécifiée.
?save "dessins
Remarque
Avant de sauvegarder, insérez une disquette formatée disposant d'une capacité suffisante. Ne sauvegardez pas sur une disquette système. Il est préférable de fermer le trou de protection en écriture pour éviter tout risque d'écriture accidentelle.
Si vous utilisez la version CP/M 2.2 du Dr. LOGO (face 4d'une des disquettes système), veillez àce que votre disquette de travail dispose de l'espace nécessaire au stockage des programmes, car vous ne pourrez pas changer de disquette en cours de procédure.
*
savepic
Ecrit le contenu de l'écran graphique dans le fichier grahique spécifié.
?savepic "mon_dess?savepic "b:mon_dess
Remarque
Avant de sauvegarder, insérez une disquette formatée disposant d'une capacité suffisante. Ne sauvegardez pas sur une disquette système. Il est préférable de fermer le trou de protection en écriture pour éviter tout risque d'écriture accidentelle.
Si vous utilisez la version CP/M 2.2 du Dr. LOGO (face 4d'une des disquettes système), veillez àce que votre disquette de travail dispose de l'espace nécessaire au stockage des programmes, car vous ne pourrez pas changer de disquette en cours de procédure.
*
setd
(setdrive) Définit l'unité spécifiée comme unité par défaut.
?defaultdA:
?dir
[BOITE CERCLE TRIANGLE]
?setd b:
?defaultd
B:
?dir
[ETOILE MAISON]
Clavier et manette de jeu :
buttonp
(button pressed=bouton appuyé) Répond TRUE (vrai) si le bouton de la manette de jeu est actionné. Les numéros 0 et 1 servent a identifier les deux manettes de jeu.
?to timer>label "boucle
>if (buttonp 0) [pr [tirer 0!]]
>if (buttonp 1) [pr [tirer 1!]]
>go "boucle
>end
La position de la manette de jeu est testée par paddle.
keyp
Répond TRUE (vrai) si un caractère vient d'être tapé au clavier et attend d'être enregistré.
?to inkey>if keyp [op rc] [op "]
>end
paddle
Permet de connaître les états de la manette 0 ou 1. Les positions sont codées comme suit:
|
Valeur retournée |
Signification |
|
255 |
Rien |
|
0 |
En haut |
|
1 |
En haut et à droite |
|
2 |
A droite |
|
3 |
En bas et à droite |
|
4 |
En bas |
|
5 |
En bas et à gauche |
|
6 |
A gauche |
|
7 |
En haut et à gauche |
?paddle 0255
Les boutons de tir sont testés par la commande buttonp.
rc
(read character=sortie d'un caractère) Sort le premier caractère tapé au clavier.
?make "touche rc
...et appuyez sur la touche X :
?:toucheX
rl
(read list = sortie d'une liste) Donne une liste contenant une entrée au clavier qui doit être suivie d'un retour chariot.
?make "instr_list rlrepeat 4 [fd 50 rt 90]
?:instr_list
[repeat 4 [fd 50 rt 90]]
rq
(read quote = extraction d'un mot) Donne un mot contenant une ligne entrée au clavier, qui doit être suivi d'un retour chariot.
?make "commande rqrepeat 3 [fd 60 rt 120]
?:commande
repeat 3 [fd 60 rt 120]
LE SON:
Seule la version AMSTRAD de Dr. LOGO possède des commandes pour le son. Elles sont d'ailleurs identiques à leurs équivalents BASIC. Reportez-vous à la partie 9 du Cours Elémentaire pour plus de détails.
sound
Met un son dans une suite de sons (queue). Le format de cette instruction est: [<état de canal> <periode sonore> <durée> <volume> <enveloppe de volume> <enveloppe de tonalité> <bruit>]. Tous les paramètres après durée sont facultatifs.
?sound [1 20 50]
env
Construit l'enveloppe de volume (la forme de la note). Son format est: [<numéro de l'enveloppe> <section(s) de l'enveloppe>]
?env [1 100 2 20]?sound [1 200 300 5 1]
ent
Construit l'enveloppe de tonalité. Son format est :[<numéro de l'enveloppe> <section(s) de l'enveloppe>]
?ent [1 100 2 20]?sound [1 200 300 5 1 1]
release
Libère les canaux dont l'exécution a été suspendue par la commande sound. Les canaux à libérer sont indiqués par le code suivant:
|
Valeur entrée |
Canaux libérés |
|
0 |
Aucun |
|
1 |
A |
|
2 |
B |
|
3 |
A et B |
|
4 |
C |
|
5 |
A et C |
|
6 |
B et C |
|
7 |
A et B et C |
?release 1
Les commandes de déroulement de programme
bye
Lorsque l'on en a terminé avec Dr. LOGO.
?bye
co
Pour continuer après une pause provoquée par [CTRL]Z, pause ou ERRACT.
?co
go
Exécute la ligne de commande repérée par une étiquette à l'intérieur d'une procédure.
>go "boucle
if
Exécute une ou deux listes d'instructions suivant la valeur de l'expression entrée ; ces listes en toutes lettres doivent être entourées de crochets.
>if (:a>:b) [pr [a est plus grand]]>if (:a<:b) [pr [b est plus grand]]
label
Pose une étiquette sur une ligne d'instruction qui pourra ainsi être appelée à l'aide de la commande go.
>label "boucle
op
(output = retourne) Affiche l'objet entré et interrompt la procédure.
?op [resultat]
repeat
Répète la liste d'instructions autant de fois que le numéro le spécifie.
?repeat 4 [fd 50 rt 90]
run
Exécute la ligne d'instructions.
?make "instr list [Fd 40 rt 90]?run :instr list
stop
Interrompt l'exécution de la procédure en cours et revient au niveau supérieur TOPLEVEL (le symbole?) ou à la procédure d'appel.
?stop
wait
Arrête l'exécution de la procédure pendant le temps spécifié par le nombre entré. La longueur du temps de pause est : nombre entré * 1/60 seconde.
?wait 20
Traitements des cas particuliers
catch
(attrape) Pour traiter une erreur ou un cas particulier qui survient pendant l'exécution d'une série d'instructions.
>catch "error [+ [] []]>pr [je suis ici]
je suis ici
error
Donne la liste d'instructions qui a causé la dernière erreur.
>catch "error [execute jusau'a l'erreur]>show error
*
notrace
Désactive trace (voir cette commande).
?notrace
*
nowatch
Désactive watch (voir cette commande).
?nowatch
pause
Suspend l'exécution de la procédure en cours, permettant ainsi le dialogue entre Dr. LOGO et l'utilisateur.
>if :cote>5 [pause]
throw
Exécute la ligne d'instruction identifiée par le nom entré sous catch.
?throw "TOPLEVEL
*
trace
Affiche le nom de chaque procédure en cours d'exécution.
?trace
*
watch
Affiche le nom de chaque expression en cours d'exécution.
?watch
Les primitives système
.contents
Affiche le contenu de l'emplacement des symboles de Dr. LOGO.
.deposit
Place le deuxième nombre entré à l'emplacement mémoire donné par le premier nombre.
.examine
Affiche le contenu de l'emplacement mémoire spécifié.
*
.in
Recherche la valeur en cours de l'entrée spécifiée.
*
.out
Envoie la valeur introduite vers l'entrée spécifiée.
Les variables système
ERRACT
Renvoie au niveau supérieur TOPLEVEL,lorsque TRUE (vrai) provoque une pause au moment d'une erreur.
FALSE
Valeur système.
REDEFP
Quand TRUE (vrai) permet la redéfinition des primitives.
TOPLEVEL
throw``TOPLEVEL clos toutes les procédures en attente.
TRUE
Valeur système.
Les propriétés du système:
.APV
Valeur de la variable associée à la propriété ; à savoir la valeur de la variable globale.
.DEF
Définition d'une procédure
*
.ENL
Fin d'une ligne de procédure interrompue par un retour chariot ou des espaces.
*
.EMT
Début d'une ligne de procédure interrompue par un retour chariot ou des espaces.
.PRM
Identifie une primitive.
*
.REM (ou;)
Remarques ou commentaires.