Remplace une partie du texte par une autre et fait éventuellement un GOTO.
Markov ( etiquette cible reference entree carac borneinf carac bornesup chaine motif chaine remplacerpar )
Cette fonction est d'une grande importance dans le traitement des chaînes en GOTO++ et elle remplace avantageusement les expressions régulières (qui sont tout de même présentes, pour les conservateurs).
Elle travaille sur entree et recherche dedans une sous-chaîne qui correspond au motif décrit par motif. Cette sous-chaîne est alors remplacée par remplacerpar en tenant compte des informations données par motif.
La signification de motif est gouvernée par borneinf et bornesup. Tout caractère du motif qui est compris entre borneinf et bornesup est considéré comme un caractère interchangeable. C'est à dire qu'il signifie en réalité « n'importe quel caractère entre borneinf et bornesup. » Par ailleurs si un de ces caractères apparaît plusieurs fois dans le motif, il désignera une répétition du même caractère (par exemple si a et z sont les bornes, le motif «ccc» désignera la répétition trois fois de suite d'un même caractère situé dans ces bornes). Les caractères du motif en dehors des bornes se désignent eux-même.
Si le motif est trouvé, il est remplacé par remplacerpar, en tenant compte de la signification qui a été donnée aux caractères interchangeables (par exemple si «c» de motif correspondait à un «e» de entree, alors si on trouve «c» dans remplacerpar, le caractère «e» sera inséré). Suite à quoi, l'exécution continue à cible.
Sinon l'exécution continue à la ligne suivante et la chaîne d'entrée n'est pas modifiée.
GOTO Cet exemple inverse les lettres d'une chaîne GOTO On utilise le caractère * comme guide pour inverser GOTO la chaîne et le caractère - pour supprimer ensuite GOTO ces étoiles. c=«bonjour» §1 GOTOPRINTDUTEXTE() ;&c Markov() %1 c *`a' *`z' «**» «-» Markov() %1 c *`a' *`z' «-a» «a-» Markov() %1 c *`a' *`z' «-*» «-» Markov() %2 c *`a' *`z' «-» «» Markov() %1 c *`a' *`z' «*ab» «b*a» Markov() %1 c *`a' *`z' «» «*» §2 GOTOPRINTDUTEXTE() ;&c GOTO affiche «roujnob»