2013-10-14 87 views
2

當我編譯如下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抱怨Isolated expression.

當我把表達式放在括號:show (f(0)+1),事情變得更加陌生。錯誤消息變爲:Missing ')' has been inserted.(第一個引號應該是反引號,但我無法弄清楚如何轉義它)。哪裏有一個不匹配的括號?

感謝您的幫助!

回答

1

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 ...端基較重的宏定義,併爲較輕的至少括號:例如,

def f = 1 + 2 enddef; 
show f * 2; 

1 + 2 * 2,這是與預期的不一樣:

def f = (1 + 2) enddef; 
show f * 2; 

它給出了(1 + 2) * 2