Metapost 奇怪的元后括号错误
编译以下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')已插入。(第一个引号应该是反引号,但我不知道如何转义)。到底哪里有不匹配
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