==================================================
GBOL++ 1.0.9
==================================================
La machine GBOL est une machine à deux listes, notées S et M,
chacune étant vide ou contenant des entiers (positifs ou négatifs, ou 0) ,
ou des lettres.
Elle peut donc émuler une machine de Turing, donc, en simplifiant,
beaucoup d'automates amusants.
http://fr.wikipedia.org/wiki/Langage_de_programmation_exotique
Notations :
-----------
Nous appelerons T le dernier terme de la liste S , et N l'élément précédent T.
{} est la liste vide.
--> dénote le résultat d'un programme (impressions)
:= signifie 'devient'
Exemple:
S = {-1 33 a b 42 666} ; T=666; N=42
Opérations :
------------
Enlister : ajouter un dernier terme à une liste.
Délister : supprimer le dernier terme d'une liste - On appelle "résultat" l'élément supprimé.
Le langage GBOL - Instructions
------------------------------
> Déliste M et enliste le résultat dans S (sans effet si M est vide)
< Déliste S et enliste le résultat dans M (sans effet si S est vide)
# Echange T et N
= Enliste T dans S (duplication de T)
! Imprime T (nombre ou lettre)
R Enliste un nombre aléatoire positif dans S
X Déliste S
| Déliste S
§ Vide toutes les listes et démarre la machine
$ Arrète la machine
+ N := N+T; ensuite X (S est délistée)
* N := NxT; ensuite X
- N := N-T; ensuite X
/ N := N/T; ensuite X (si T=0 le résultat est indéfini)
% N := N modulo T; ensuite X (si T=0 le résultat est indéfini)
Exemples de programmes :
§R=/! : imprime 1
§R=-! : imprime 0
§R=/===+++! : imprime 4
avant : S= {12}
§ R=/====+=*
aprés : S= {12 1 1 1 4 }
(...) : Répétitions
--------------------
Les instructions GBOL sont exécutées en séquence.
Exception : Toute suite d'instructions entre parenthéses est répétée tant que T > 0.
Si T <= 0, ou si S est vide, cette suite n'est pas exécutée.
On peut imbriquer les parenthèses.
Si abc... est une suite d'instructions :
(abc...) est équivalent à :
Tant que T > 0
Exécuter abc...
Exemple : §R=/===+++ (!R=/-!) --> 4 3 3 2 2 1 1 0
Exemple : §R=/=( (=<*>R=/-) X!XR=/+=) --> 1 2 6 24 120 720 5040 .. (factorielles)
Exemple : § 1 () --> boucle infinie ..
Phrases
-------
Une phrase est une suite de mots ou d'instructions qui commence par un mot majuscule (1),
et finit par un point '.' .
Une phrase peut être insérée (invoquée) dans un programme, une autre phrase, ou elle-même.
Pour insérer une phrase, on écrit son premier mot.
Une phrase est en abyme si elle s'invoque elle-même.
L'insertion se termine dés que l'on rencontre un point '.' dans l'éxécution de la phrase.
Remarque :
Le '.' correspond à l'instruction 'retour','return' dans certains langages de programmation.
Exemples :
QuaranteDeux R=/=+=<=<=====****>==**+>+!.
§ QuaranteDeux --> 42
Encore =+==**!.
§ R=/ Encore --> 8
§ R=/ Encore Encore Encore --> 8 4096 549755813888
DoubleDeux =<#=<#>>.
§RR DoubleDeux --> S = {1765940786 840973735 1765940786 840973735}
Plus grand Commun diviseur : Remarquons que cette phrase se met en abyme.
PgCd (=<%># PgCd .) X.
§ R!R! PgCd ! --> 231 3333 33 (33 est le PGCD de 231 et 3333)
§ R!R! PgCd ! --> 1564985037 1463912607 3
(1) Mot commençant par une Majuscule
et ne contenant pas deux majuscules consécutives,
et contenant au moins un minuscule.
Invocation de phrases par numéro
--------------------------------
Chaque phrase a un numéro > 0 . On peut invoquer une phrase par son numéro.
Instructions :
& Enliste dans S le numéro de phrase dont le nom suit
@ Déliste S dans F. Ensuite invoque la phrase de numéro F (si existante)
Exemple :
ActionUn !.
ActionDeux !!.
PlusGrand =<#=<#>> -.
Boucle < 1 (X >=< @ 1+PlusGrand) >XXX . " boucle de T à N "
§ 100 1 &ActionUn Boucle
§ 100 1 &ActionDeux Boucle
Ce qui permet d'augmenter le langage à loisir.
Lettres
-------
: : Remplace T par la T-ième lettre du programme; par 0 (zéro) si T trop grand.
\ : Rempace la T-ième lettre du programme par N (si N est une lettre) . Ceci permet
au programme de se modifier lui-même.
Exemple :
§14=:(!X1+=:)Bonne année --> imprime Bonne année
Raccourcis
----------
Les chiffres et nombres décimaux ne font pas partie du langage GBOL,
mais la pluspart des compilateurs GBOL acceptent les abbréviations suivantes :
0 à la place de R=-
1 à la place de R=/
2 à la place de R=/=+
3 à la place de R=/==++
4 à la place de R=/===+++
666 à la place de R=/======....++++..(665 fois)
etc.
Exemple :
§ 666 42 =
Aprés : S = {666 42 42}
Calcul de racine carrée :
PlusGrand =<#=<#>>-.
RacineCarree 1+2/0 1 (X=<-> 1+ PlusGrand) X.
§ 443556 RacineCarree ! --> 666
Exercices
----------
E0 : Ecrire un programme qui multiplie 666 par 42
E1 : Ecrire un programme qui imprime 2 4 6 8 10 ... 666 ..
E2 : Ecrire un programme qui imprime la suite de Fibonacci : 1 1 2 3 5 8 13 21 ..
E3 : Ecrire la phrase 'Factorielle' en abyme qui imprime la factorielle de T
§ 11 Factorielle ! --> 39916800
§ 0 Factorielle ! --> 1
E4 :
Soit S ne contenant que des entiers positifs.
Ecrire la phrase 'Rotation' qui effectue une rotation de S :
Avant : S = { 1 2 3 4 5 }
Rotation
Aprés : S = {5 1 2 3 4 }
Rotation
Aprés : S = {4 5 1 2 3 }
E5 : Ecrire la phrase 'Puissance' T := N puissance T
Pour tricher : http://www.labri.fr/perso/betrema/deug/poly/exp-rapide.html
E6 : Ecrire un interpréteur GBOL pour votre système préferré (Mac ou PC ?)
Concours (clôture le 3/3/2009)
==============================
C1 : Ecrire la phrase 'Premier' qui imprime T si T est premier, 0 sinon.
§ 101 Premier --> 101
§ 666 Premier --> 0
§ 988599581 Premier --> 988599581
Les ex-aequo seront départagés par les performances du programme
(nombre d'instructions exécutées pour un nombre secret déposé au pavillon de Breteuil)
Les prix seront conséquents.
Voir aussi
----------
http://fr.wikipedia.org/wiki/Th%C3%A9orie_des_automates
Au cours des années suivantes, les chercheurs débordèrent d'imagination
pour créer différentes variations de la machine de Turing;
machine à une pile, à deux piles (GBOL) et plus, machine à queues,
machine de post, machines à registres, etc.
Ils s'aperçurent rapidement que malgré leurs efforts,
la variation n'était qu'une illusion et que tout automate s'inscrivait
dans une des quatre catégories qu'ils avaient découvertes.
Téléchargement
==============
Un compilateur GBOL pour Wind*ws est disponible ici :
http://www.echolalie.com/gbol