================================================== 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