Concrètement et en général, je voudrais créer des macros qui contiennent la fonction let et dont le résultat peut être directement affecté à une autre macro avec une autre fonction let. c'est-à-dire:
si je crée la macro:
définir une
123
fin
et puis à partir de la ligne de commande tape aa display, le programme affiche 123 (qui est la valeur de "aaa"). Et jusqu'à présent tout fonctionne comme il faut.
si par type de ligne de commande en séquence:
b aaa (où "aaa" est la macro définie ci-dessus)
affichage b
le programme affiche toujours 123 (qui est la valeur de "aaa" attribuée à "b"). Et encore une fois, très bien ici.
si je crée la macro:
définir une
local à
a 123
a
fin
puis par type de ligne de commande aa, le programme affiche 123 (la valeur attribuée à "a" dans la macro "aaa"). Très bien.
Maintenant, si par type de ligne de commande let b aaa (où "aaa" est la deuxième macro définie ci-dessus), le programme affiche l'erreur "Bien que la macro ne soit pas définie", au lieu d'attribuer à "b" la valeur 123 retournée de la macro "aaa".
à mon avis il s'agit d'un comportement anormal: semble que la fonction appelante "let b aaa" entre en conflit avec la fonction "let to 123" dans la macro "aaa".
Je peux évidemment contourner le problème en modifiant la macro "aaa" et en utilisant des macros globales:
définir une
le macro_résultat 123
fin
puis par type de ligne de commande :
♪
_
et dans "b" j'ai le résultat de la macro "aaa". Mais cela semble non professionnel et impur. Je peux programmer dans d'autres langues (autocad lisp, gbg lpg, base visuelle), et avec ces langues je n'ai jamais connu de tels problèmes.
Maintenant, en particulier, nous voyons la macro suivante qui à l'intérieur d'une chaîne remplace un sous-trande par un autre sous-trande:
appel replstr
paramètre
paramètre os
paramètre ns
local i
locaux
locaux
♪
♪
boucle
le i (pos s 2 os)
sortie_si (i = 0)
(i - 1)) + ns)
(i + (en)
le s2 (sous-str s2 i ((len s2) - i + 1))
end_loop
le s1 (s1 + s2)
le macro_résultats s
fin
si par type de ligne de commande:
♪
dans le_résultat macro J'aurai la corde 'mimmo'.
Mais si je change la macro comme ça :
appel replstr
paramètre
paramètre os
paramètre ns
local i
locaux
locaux
♪
♪
boucle
le i (pos s 2 os)
sortie_si (i = 0)
(i - 1)) + ns)
(i + (en)
le s2 (sous-str s2 i ((len s2) - i + 1))
end_loop
le s1 (s1 + s2)
s1 { <----------------- Je veux retourner la corde directement!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ?
fin
typage depuis la ligne de commande & #160;:
afficher le replstr 'pippo' 'p' 'm '
le programme affiche 'mimmo'.
saisie à la place (toujours depuis la ligne de commande):
(replstr 'pippo' 'p' 'm')
le programme affiche l'erreur : [Essayez l'entrée]
dactylographie:
laisser b replstr 'pippo' 'p' 'm' (retourné sans parenthèses)
affichage b
le programme affiche : 'pippo '
Je voudrais que vous tapiez:
(replstr 'pippo' 'p' 'm')
la macro "b" contenait la chaîne "mimmo".
J'espère l'avoir expliqué. . . .