Troupeaux

Les troupeaux permettent de regrouper plusieurs pingouins. On distingue deux types de troupeaux : les troupeaux de pingouins anonymes et les troupeaux de pingouins déclarés.

Troupeaux de pingouins anonymes

Toute variable est potentiellement un troupeau de pingouins. Si vous la considérez en tant que tel, alors ce sera un troupeau de pingouins. Pour accéder à un pingouin du troupeau, il suffit de donner son numéro entre < et > (le premier pingouin a le numéro 0). Exemple :

J=*(3) GOTO Là J est un entier
J<*(3)>=*(5) GOTO Maintenant J est un troupeau
GOTO Le quatrième pingouin vaut 5
Z=&J<*(3)>
GOTO Z vaut à présent 5
Z=&J<*(2)+*(1)>
GOTO Là aussi...

Troupeaux de pingouins déclarés

Pour déclarer un troupeau de pingouin, il faut utiliser le mot-clef troupeau. On donne ensuite le nom de tous les pingouins, dans l'ordre.

Plutôt qu'un long discours, donnons un exemple, dans lequel on définit un type de troupeau nommé Machin.

troupeau Machin
	pingouin Jules
	pingouin Gustave
	pingouin Bertrand
fintroupeau

Autrement dit, on écrit sur chaque ligne pingouin puis le nom du pingouin. Quand on a fini la description on met une ligne avec écrit fintroupeau.

Ensuite il faut déclarer que la variable est un troupeau de type Machin (on peut avoir autant de troupeaux du même type que l'on souhaite). Pour cela on met le nom du type de troupeau suivis du nom de la variable. Par exemple :

Machin MonTroupeau

Pour accéder à un pingouin du troupeau, on peut faire comme au paragraphe précédent, en utilisant le numéro du pingouin, mais évidemment c'est sans intérêt. Tout le truc c'est qu'à présent on peut accéder à un pingouin particulier en utilisant son nom : pour cela on met le nom du troupeau, le symbole @ puis enfin le nom du pingouin. Par exemple :

MonTroupeau@Bertrand=*(5)
GOTOPRINTDUTEXTE() ; &MonTroupeau@Bertrand
GOTO ... ce qui affiche 5.

Mais ce n'est pas si simple. D'abord on peut très bien mettre des troupeaux dans d'autres troupeaux, en mettant le nom du troupeau à la place de pingouin. Par exemple :

troupeau GrandTroupeau
	pingouin Lechef
	Machin Lesvieux
	Truc Lesjeunes
	pingouin Lesouschef
fintroupeau

GrandTroupeau GT
GT@Lesvieux@Bertrand=*(5)

Troupeau anonyme de troupeaux déclarés

Mais là ne s'arrêtent pas là les possibilités incroyables du GOTO++ car il est tout à fait possible de mettre dans une variable un troupeau anonyme de troupeaux déclarés. Ou des troupeaux déclarés dans des troupeaux anonymes de troupeaux anonymes. Ou... Pour cela on utilise <> qu'on rajoute autant de fois que nécessaire après le nom de la variable quand on la déclare :

Machin TroupeauDeTroupeauxDeTroupeaux<><>
TroupeauDeTroupeauxDeTroupeaux<*(1)><*(18)>@Bertrand=*(5)

Et bien sûr il est tout à fait possible de mettre ces troupeaux anonymes dans des troupeaux déclarés :

troupeau Complique
	Machin Troupeau<>
	pingouin Charles
fintroupeau

Complique Aie<>
Aie<*(2)>@Troupeau<*(5)>@Bertrand=*(5)

Machines à pingouins

GOTO++ mérite son nom acquis de fière lutte de langage objet grâce à certaines particularités.

La première est qu'il est possible de rajouter des machines à pingouins dans un troupeau. En gros ce sont des fonctions qui agissent directement sur les pingouins du troupeau. Pour ce faire il faut rajouter le mot-clef machineapingouins dans la déclaration du troupeau, suivis de son nom. Ce nom, accolé au nom du type de troupeau, sera une étiquette qui pourra être la cible d'un appel de fonction qui est particulier car la fonction peut directement accéder aux pingouins membre du troupeau. Comme ce n'est pas clair, voici un exemple :

troupeau MonTroupeau
	pingouin Albert
	pingouin Bertrand
	machineapingouins Glagla
fintroupeau

MonTroupeau J
J@Albert=2
J@Bertrand=1
J@Glagla(*(3))
GOTOPRINTDUTEXTE() ; J@Albert GOTO Affiche 5
GOTOFIN

§Glagla:ASV(a):MonTroupeau
	Albert=+&a
	Bertrand=+&a
APLUS

Vous avez sûrement remarqué qu'il faut rajouter : puis le nom du troupeau après le mot-clef ASV de la fonction.

Remarquez qu'un pingouin peut être transformé en machine à pingouin. C'est cruel, mais utile. Pour cela rajouter un pingouin dans la structure puis affectez lui une étiquette. Par exemple :

troupeau MonTroupeau
	pingouin Albert
	pingouin Bertrand
	pingouin Glagla
fintroupeau

MonTroupeau Bof
Bof@Glagla=%3MonTroupeau
Bof@Glagla(*(5))
GOTOFIN

§3:ASV(x):MonTroupeau
	Albert=&x
	Bertrand=&x
APLUS

Dérivation de troupeau

Un troupeau peut être vilement copié sur un autre troupeau, vous lui rajoutez simplement de nouveaux pingouins. Pour cela après le nom du type de troupeau, rajoutez : puis le nom du type de troupeau de base.

troupeau Test:MonTroupeau
	pingouin Gerard
fintroupeau

Test Arg
Arg@Albert=*(5)
Arg@Gerard=*(6)

Berger

Cerise sur le gâteau au pingouin, une machine à troupeau peut être appelée lors de la déclaration d'une variable comme étant de ce type de troupeau. Pour cela rajoutez berger n'importe où dans la définition du troupeau. La méthode 0NomDuTroupeau sera automatiquement appelée à l'endroit où vous déclarez la variable.

troupeau Glop
	pingouin Youpi
	berger
fintroupeau

Glop Z
GOTO Z@Youpi vaut à présent 3.
GOTOFIN

§0:ASV:Glop
	Youpi=*(3)
APLUS

Pingouins givré

Un pingouin givré est partagé par tous les troupeaux d'un même type. Pour dire qu'un pingouin d'un type de troupeau est givré, il faut rajouter GIVRE avant son nom.

troupeau Glop
	pingouin GIVRE Albert
fintroupeau

Glop Blub
Blub@Albert=*(10)
Glob Blob
GOTOPRINTDUTEXTE() ; &Blob@Albert
GOTO Affiche 10

Une machine à pingouin peut être givrée elle aussi, auquel cas elle ne peut accéder qu'aux pingouins givrés. Il faut également rajouter le mot-clef GIVRE avant son nom.

troupeau Glop
	pingouin GIVRE Albert
	machineapingouins GIVRE Multiplicatrice
fintroupeau

Glop Blub
Blub@Albert=*(10)
Glob Blob
Blob@Multiplicatrice()
GOTO Affiche 10
GOTOFIN

Multiplicatrice:ASV:Glop
	GOTOPRINTDUTEXTE() ; &Albert
APLUS

Le berger peut aussi être givré : il est alors appelé à l'endroit où le troupeau est défini.

Vous pouvez rajouter le mot-clef GIVRE directement avant le nom du type de troupeau, auquel cas tous les pingouins, toutes les machines à pingouin et l'éventuel berger seront givrés.

Remarque : il est aussi possible d'accéder à un pingouin givré ou à une machine à pingouin givrée en remplaçant le nom du troupeau par le nom du type de troupeau. Ainsi dans l'exemple précédent on aurait pu mettre Glop@Multiplicatrice à la place de Blob@Multiplicatrice.