Page 1 sur 1

Ecrire un macro de dessin

Posté : lun. 17 juin 2019, 15:48
par Alfred
Bonjour,
ayant eu l'occasion d'écrire quelques macros d'évaluation de fonctions, je m'attaque maintenant aux macros de dessin. J'ai choisi un exemple simple pour le principe, qui peut certainement être contourné, mais ce n'est pas le but. L'exemple ci-dessous plante et j'aimerais comprendre le pourquoi. Merci de votre aide.

Code : Tout sélectionner

settings.outformat="pdf";
settings.render=0;
unitsize(1cm);

pen p1=linewidth(0.1mm);
//début macro
void parallelogramme(pair O=(0,0), pair u, pair v, pen p=currentpen)
{pair A=O, B=A+u, C=B+v, D=C-u;
draw(A--B--C--D--cycle,p);}
//fin macro

draw((0,5)--(8,8),p1);
//essai infructueux (erreurs)
parallelogramme((1,4),(2,5),p1);

shipout(bbox(5mm, invisible));

Re: Ecrire un macro de dessin

Posté : lun. 17 juin 2019, 16:00
par OG
Bonjour

Visiblement Asymptote ne comprend pas que tu n'envoies que `u` et `v`.
En mettant

Code : Tout sélectionner

parallelogramme(u=(1,4),v=(2,5),p1);
cela fonctionne. Cela vient du fait que les 3 premières entrées sont du même type, il y a ambiguïté.
En changeant l'ordre

Code : Tout sélectionner

pair u, pair v, pen p=currentpen, pair O=(0,0)
sans spécifier `u=...`, cela fonctionne.

O.G.

Re: Ecrire un macro de dessin

Posté : mer. 26 juin 2019, 14:28
par Alfred
Merci,
Donc, si j'ai bien compris, l'ordre des variables locales doit être le suivant:
en premier celles qui ne possèdent pas de valeur par défaut;
en dernier celles à qui on assigne une valeur par défaut.
Cela sous-entend que toutes les variables intermédiaires créées à l'intérieur de la macro, soit entre les accolades, sont locales.

Quelqu'un peut-il affirmer ou infirmer cette assertion ? merci

Re: Ecrire un macro de dessin

Posté : mer. 26 juin 2019, 14:43
par OG
Bonjour

Ce n'est pas ce que j'ai voulu dire.
Là le souci est (je pense) qu'il y a ambiguïté car les trois variables (dont une définie par défaut) sont du même type.