# PILOT

* Sigles de 2 caractères
* Sigles de 3 caractères
* Sigles de 4 caractères
* ► Sigles de 5 caractères
* Sigles de 6 caractères
* Sigles de 7 caractères
* Sigles de 8 caractères
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.
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.

## Histoire

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.

## Syntaxe du langage

Une ligne de code en PILOT contient les éléments de syntaxe suivants, de gauche à droite :
* 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 :
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:
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.

#### J - JUMP

    Saute vers une étiquette. Exemple:

#### M - MATCH

    Compare le tampon d'entrée avec des variables chaînes de caractères ou chaînes littérales. Exemple:
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 - REMARK

    L'opérande de R: est un commentaire, et cette instruction n'a donc aucun effet.

#### T - TYPE

    Affiche l'opérande en sortie. Exemples:

#### U - USE

    Appelle un sous-programme. Un sous-programme commence à une étiquette et se termine avec E: Exemple:

#### Y - YES

    Équivalent de TY: (affiche si la dernière recherche était fructueuse)
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:

## Variantes

Les extensions au langage de base comprennent les tableaus et les nombres à virgule flottante (Apple PILOT) et une tortue graphique inspirée du langage Logo (Atari PILOT)$^,$.
Entre 1979 et 1983 le Groupe d'Utilisateurs de PILOT du Royaume-Uni est dirigé par Alec Wood, un enseignant de la Wirral Grammar School for Boys. Plusieurs versions d'un mini PILOT en code machine sont produites pour les micro-ordinateurs de l'époque et une école en Écosse développe un tutoriel interactif en langue étrangère dans lequel les élèves se promenaient dans une ville en posant et en répondant à des questions en allemand, en français, etc. Un article paru dans le numéro de décembre 1979 de "Computer Age" traite d'une première implémentation appelée Tiny Pilot et donne un listing complet des codes machine.
Des versions de PILOT implémentées sur les interpréteurs Basic des premiers micro-ordinateurs sont courantes vers la fin des années 1970s et le début des années 1980 et une variante de PILOT non-Turing-complète est publiée dans le magazine Byte sous le nom Waduzitdo par Larry Kheriarty comme une démonstration de ce dont un ordinateur est capable$^,$.
En 1983, Vanilla PILOT pour le Commodore 64 ajoute la tortue graphique, de même que Super Turtle PILOT qui est publié sous forme de listing dans le numéro d'Octobre 1987 du magazine Compute!.
En 1990, Tom Nielsen, EdD, développe eSTeam PILOT pour Atari ST. Basé sur la préversion (draft) de la norme IEEE, il inclut des fonctionnalités spécifiques Atari telles que le contrôle de périphériques LaserDisc et CD-ROM.
En 1991, l'Institute of Electrical and Electronics Engineers (IEEE) publie une norme pour PILOT: IEEE Std 1154-1991. Il a été abandonné en 2000. Une implémentation de référence basée sur cette norme est implémentée par Eric Raymond, et maintenue pendant les 20 années suivantes.
En 2018, une implémentation amateure, psPILOT, basée en partie sur la norme IEEE, est codée en utilisant le langage de script PowerShell de Microsoft.