[NTG-context] question about vardef variables

Taco Hoekwater taco at bittext.nl
Mon Jan 18 09:13:10 CET 2021

> On 17 Jan 2021, at 11:17, Damien Thiriet <damien at thiriet.web4me.fr> 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 Hoekwater              E: taco at bittext.nl
genderfluid (all pronouns)

More information about the ntg-context mailing list