PILOT

From Wikipedia, the free encyclopedia

Date de première version1968
AuteurJohn Amsden Starkweather
Typageimplicite
PILOT
Date de première version 1968
Paradigme impératif
Auteur John Amsden Starkweather
Typage implicite
Normes IEEE 1154-1991
Influencé par Computest (d)Voir et modifier les données sur Wikidata

PILOT (acronyme de Programmed Inquiry, Learning, Or Teaching (en français Recherche, Apprentissage, Enseignement Programmés) est un langage de programmation précurseur de l’apprentissage en ligne (E-learning) développé dans les années 1960[1].

PILOT est un langage de programmation impératif, similaire dans sa forme et sa structure aux langages Basic ou Fortran. Ses mots-clefs sont généralement abrégés sur un seul caractère pour les mots-clefs principaux, comme T pour "TYPE" pour afficher du texte ou A pour "ACCEPT", pour traiter des valeurs entrées par l'utilisateur.

PILOT a été développé par John Amsden Starkweather, un professeur en psychologie au centre médical de l'Université de Californie à San Francisco. En 1962 il développe un langage simple pour automatiser les tests d'enseignement appelé Computest.

À partir de 1968, il développe une suite à ce projet, nommée PILOT, pour différents ordinateurs de l'époque comme le SDS 940[2].

Syntaxe du langage

Une ligne de code en PILOT contient les éléments de syntaxe suivants, de gauche à droite[3] :

  • une étiquette optionnelle (label)
  • une commande (généralement en version abrégée en 1 ou 2 lettres)
  • une lettre, qui peut être Y pour oui ("Yes"), ou N pour non ("No")
  • une expression conditionnelle entre parenthèses
  • deux points (:)
  • une ou plusieurs opérandes, dont la syntaxe dépend de la commande.

Aucun élément n'est obligatoire, pas même la commande. On peut donc utiliser des lignes vides pour aérer le code.

Étiquettes et variables

  • Une étiquette est composée d'une astérisque (*), suivi d'un identifiant. (Exemples: *F, *LOOP, *CALC)
  • Une variable numérique est composée du signe dièse (#), suivi d'un identifiant. (Exemples: #X, #Toto, #X1Y2)
  • Une variable chaîne de caractère est composée du signe dollar ($), suivi d'un identifiant. (Exemples: $A, $NOM, $P1L0T)
  • Une variable système est composée du signe pour-cent (%), suivi d'un identifiant. (Exemples: %ANSWER, %MATCHED, %LEFT) Dans les premières implémentations, les variables systèmes ne sont que des variables numériques, les variables systèmes chaînes de caractères sont un ajout de la norme IEEE.

Un identifiant est constitué d'une suite de lettres et de chiffres et commence obligatoirement par une lettre. Le langage n'étant pas sensible à la casse, #toto, #ToTo et #TOTO désignent la même variable, tandis que #ANSWER, $ANSWER et %ANSWER sont trois variables différentes.

Afin de distinguer la fin d'une étiquette du début de la commande, il faut séparer les deux avec au moins un espace. Pour améliorer la lisibilité, l'usage est de placer les étiquettes sur leurs propres lignes, sans commande.

Commandes

Dans la norme IEEE, les principales commandes (core PILOT) peuvent toutes être abrégées à leur première lettre. Dans les premières implémentations, seules ces raccourcis d'une lettre sont reconnus par l'interpréteur. (Les lignes commençant par R: sont des commentaires)

A - ACCEPT
Accepte des entrées dans un "tampon d'entrée". Exemples :
 R:La prochaine ligne entrée au clavier remplace le contenu du tampon
 A:
 R:La prochaine ligne entrée remplace le tampon, et la variable chaîne de caractères 'FREE'
 A:$FREE
 R:Les 3 prochaines lignes entrées sont assignées aux variables 'X', 'Y' et 'Z'
 A:$X,$Y,$Z
 R:La prochaine entrée numérique est assignée à la variable numérique 'Q'
 A:#Q

Dans les versions IEEE, le tampon d'entrée est disponible dans la variable système %ANSWER.

C - COMPUTE
Calcule et assigne des valeurs numériques. La plupart des implémentations de PILOT ne font que des calculs entiers, et n'ont ni tableau, ni d'autre structure de données. Exemple:
 R:Assigne la moyenne arithmétique de #X et #Y dans #AM
 C:#AM=(#X+#Y)/2
 R:Crée une chaîne $DATE à partir des valeurs numériques #DAY et #YEAR et de la chaîne $MONTH
 C:$DATE=#DAY/$MONTH/#YEAR

Les opérateurs numériques reconnus sont les 4 opérations de base: + addition, - soustraction, * multiplication et / division entière.

La seule opération disponible sur les chaînes de caractères est la concaténation, qui peut être utilisée avec des variables ou des chaînes constantes. Il n'y a pas de délimiteurs pour les chaînes constantes, donc en dehors des noms de variables, tous les caractères entre le = et la fin de la ligne sont considérés comme des chaînes constantes, y compris les caractères d'espacement avant la fin de la ligne.

Aucune notion de fonction n'existe, ni fonction prédéfinie, ni fonction utilisateur.

E - END
Fin de sous-programme ou (si en dehors d'un sous-programme) termine le programme. Toujours utilisé sans opérande.
 R:Calcule la moyenne de 2 valeurs.
 R:Entrées: #X et #Y contiennent les 2 valeurs.
 R:Sortie: #MOY contient la moyenne calculée.
 *MOYENNE
 C:#MOY=(#X+#Y)/2
 E:
J - JUMP
Saute vers une étiquette. Exemple:
 J:*RESTART
M - MATCH
Compare le tampon d'entrée avec des variables chaînes de caractères ou chaînes littérales. Exemple:
 R:Cherche dans le tampon le mot "VRAI", la valeur de MEXICO, ou le mot "JEUNE", dans cet ordre
 M:VRAI,$MEXICO,JEUNE

La première chaîne trouvée (s'il y en a une) est assignée à la variable système %MATCH ($MATCH sur les premières implémentations). Les caractères à gauche de cette chaîne dans le tampon sont assignés à la variable %LEFT, et les caractères à droite à la variable %RIGHT. ($LEFT et $RIGHT sur les premières implémentations.) Ce découpage de la chaîne de caractère en trois est la seule opération de recherche de sous-chaînes sur les chaînes de caractères, et elle n'est disponible que sur le tampon d'entrée.

Le drapeau de comparaison est positionné à 'oui' ou 'non', selon le résultat de la recherche. Toute instruction qui a un Y après la lettre de commande ne sera exécutée que si le drapeau est sur 'oui', autrement dit, si la dernière recherche a trouvé une des chaînes. Les instructions avec N ne sont exécutés que si le drapeau est sur 'non'. Pour les implémentations IEEE, le drapeau de comparaison est disponible dans la variable système %MATCHED, qui vaut 1 pour 'oui' et 0 pour 'non'.

N - NO
Équivalent de TN: (affiche si la dernière recherche a échoué)
 R:Exemple de programme d'apprentissage.
 T:Quelle est la capitale de la France?
 A:
 M:paris
 Y:Gagné!
 N:Perdu!
R - REMARK
L'opérande de R: est un commentaire, et cette instruction n'a donc aucun effet.
 R:Cette commande ne fait rien, à part commenter le code qui l'entoure...
T - TYPE
Affiche l'opérande en sortie. Exemples:
 R:La prochaine ligne affiche une chaîne littérale
 T:Merci pour votre aide.
 R:La prochaine ligne combine une chaîne littérale avec une chaîne variable et une variable numérique
 T:Bravo, $NOM, votre score est de #SCORE.
U - USE
Appelle un sous-programme. Un sous-programme commence à une étiquette et se termine avec E: Exemple:
 R:Appelle le sous-programme *MOYENNE
 U:*MOYENNE
Y - YES
Équivalent de TY: (affiche si la dernière recherche était fructueuse)
 R:Exemple de programme d'apprentissage.
 T:Quelle est la capitale de la France?
 A:
 M:paris
 Y:Gagné!
 N:Perdu!

Ce jeu de commandes étant très limité, la plupart des implémentations fournissent des commandes supplémentaires, souvent abrégées sur deux lettre au lieu d'une.

Expressions Conditionnelles

S'il y a une expression entre parenthèses dans une instruction, c'est une expression conditionnelle, et l'instruction n'est exécutée que si le test est vérifié. Par exemple:

 R:Affiche un message en fonction de #score
 T(#SCORE>=10):Bravo! Vous avez #SCORE/20, c'est très bien!
 T(#SCORE<10) :Vous avez obtenu #SCORE/20. Encore un effort, vous pouvez faire mieux!

Variantes

Notes et références

Bibliographie

Related Articles

Wikiwand AI