Re: [NTG-context] question about vardef variables
> On 17 Jan 2021, at 11:17, Damien Thiriet wrote: > > Hi, > > > I have some troubles with understanding metafun's macro mechanism. > > Given this MWE: > > \starttext > \startMPpage > > vardef Test (expr ab,cd)= > %numeric ab; > %numeric cd; > draw unitsquare scaled 10 xshifted ab; > draw unitsquare scaled 10 yshifted cd; > enddef; > > Test (50,100); > \stopMPpage > \stoptext > > Uncommenting the two declarations makes me run intro a silent error. I was > lucky enough yesterday to get an explicit error message with a more > complex macro. It made me figure out where my problems came from. > > So here are my two questions: > - Why shouldn't we tell metafun if expr is a path, a pair or so on? You were (attempting to) redefine the macro’s arguments, but they are read-only. A somewhat longer answer: the type of macro arguments in this case is “expr”. Metapost argument types are based solely on what the internal language parser needs to interpret the code; the language is not strongly typed. Also, during macro expansion, your code is replaced by: %numeric (READONLY TEMP VALUE 1); %numeric (READONLY TEMP VALUE 2); draw unitsquare scaled 10 xshifted (READONLY TEMP VALUE 1); draw unitsquare scaled 10 yshifted (READONLY TEMP VALUE 2); Best wishes, Taco — Taco Hoekwater E: t...@bittext.nl genderfluid (all pronouns) ___ If your question is of interest to others as well, please add an entry to the Wiki! maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context webpage : http://www.pragma-ade.nl / http://context.aanhet.net archive : https://bitbucket.org/phg/context-mirror/commits/ wiki : http://contextgarden.net ___
Re: [NTG-context] question about vardef variables
Dear Damien Thiriet, If you change ‘vardef’ to ‘def’, you will get the figure. There is a difference between ‘vardef’ and ‘def’. AFAIK, vardef returns the value of the last statement in the macro. Please see the examples in Metafun manual from page 32 ~ . I hope that you find your answer there. I am sorry that I am not good enough to explain the variables. Best regards, Dalyoung > 2021. 1. 17. 오후 8:00, ntg-context-requ...@ntg.nl 작성: > > \starttext > \startMPpage > > vardef Test (expr ab,cd)= > %numeric ab; > %numeric cd; > draw unitsquare scaled 10 xshifted ab; > draw unitsquare scaled 10 yshifted cd; > enddef; > > Test (50,100); > \stopMPpage > \stoptext ___ If your question is of interest to others as well, please add an entry to the Wiki! maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context webpage : http://www.pragma-ade.nl / http://context.aanhet.net archive : https://bitbucket.org/phg/context-mirror/commits/ wiki : http://contextgarden.net ___
[NTG-context] question about vardef variables
Hi, I have some troubles with understanding metafun's macro mechanism. Given this MWE: \starttext \startMPpage vardef Test (expr ab,cd)= %numeric ab; %numeric cd; draw unitsquare scaled 10 xshifted ab; draw unitsquare scaled 10 yshifted cd; enddef; Test (50,100); \stopMPpage \stoptext Uncommenting the two declarations makes me run intro a silent error. I was lucky enough yesterday to get an explicit error message with a more complex macro. It made me figure out where my problems came from. So here are my two questions: - Why shouldn't we tell metafun if expr is a path, a pair or so on? - Would it be possible to issue an error message each time this wrong declaration is made? Thanks, Damien Thiriet ___ If your question is of interest to others as well, please add an entry to the Wiki! maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context webpage : http://www.pragma-ade.nl / http://context.aanhet.net archive : https://bitbucket.org/phg/context-mirror/commits/ wiki : http://contextgarden.net ___