在编译以下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抱怨Isolated expression.
当我把表达式放在括号中时:show (f(0)+1),事情就变得更奇怪了。错误消息是:Missing ')' has been inserted. (第一个引号应该是一个反向引号,但我不知道如何转义它)。到底哪里有不匹配的括号??
谢谢你的帮忙!
发布于 2014-03-28 08:42:33
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。
https://stackoverflow.com/questions/19368472
复制相似问题