Metapost 奇怪的元后括号错误

Metapost 奇怪的元后括号错误,metapost,Metapost,编译以下Metapost文件时: beginfig(1); def f(expr n) = if n=0: 0 else: 1 fi; enddef; show f(0)+1; endfig; end 我希望得到输出1(因为f(0)等于0,f(0)+1应该是1!)。但是,Metapost抱怨有一个独立表达式。 当我把表达式放在括号中:show(f(0)+1)时,事情变得更加奇怪。错误消息变为:Missing')已插入。(第一个引号应该是反引号,但我不知道如何转义)。到底哪里有不匹配

编译以下Metapost文件时:

beginfig(1);
def f(expr n) =
  if n=0: 0
  else: 1
  fi;
enddef;
show f(0)+1;
endfig;
end
我希望得到输出1(因为f(0)等于0,f(0)+1应该是1!)。但是,Metapost抱怨有一个
独立表达式。

当我把表达式放在括号中:
show(f(0)+1)
时,事情变得更加奇怪。错误消息变为:
Missing')已插入。
(第一个引号应该是反引号,但我不知道如何转义)。到底哪里有不匹配的括号


谢谢你的帮助

使用
def
命令只需将名称扩展到其定义中,就可以得到:

show if 0=0: 0 else: 1;+1;
中间的分号是错误的,所以让我们去掉它:

beginfig(1);
def f(expr n) =
  if n=0: 0
  else: 1
  fi
enddef;
show f(0)+1;
endfig;
end
这将产生正确的扩展:

show if 0=0: 0 else: 1+1;
并按预期输出
1


另一方面,我建议对较重的宏定义使用begingroup…endgroup,对较轻的宏定义至少使用括号:例如

def f = 1 + 2 enddef;
show f * 2;
给出了
1+2*2
,这与预期的不同:

def f = (1 + 2) enddef;
show f * 2;
它给出了
(1+2)*2