2010-11-23 41 views
2
處理

假設我定義以下(壞)模式有下標的變量

Subscript[\[Beta], i_][x_] := Subscript[\[Beta], i][x[[i]]]; 
  1. 是否有可能清除這種模式不清除定義爲所有其他變量下標?我首先想到的是修改下標的DownValues,但它似乎是空

  2. 是否有可能/實用與下標參數的函數? IE,沿着f[x_1,x_2,x_3]:=Total[x_#&/@Range[3]]的路線。我聽說有人用Symbolize來標註下標,它會在這裏工作嗎?

+0

你例子2不是很清楚......不過是你可以在函數中使用標 - 他們遵守模式匹配規則像其他任何東西是的,如果我想使用下標重音符號,我經常使用`Symbolize`或`MakeBoxes`。 – Simon 2010-11-23 09:13:07

+0

不使用下標的好處在於,對於upvalue定義,符號的深度要低一級。比較:`b /:a [b [j _],x _]:= x^b [j]`適用於`b /:Subscript [a,b [j _]] [x _]:= x^b [ j]`失敗。 – Simon 2010-11-23 09:20:35

回答

4

它在SubValues(見Information["*Values"])。

In[25]:= Subscript[\[Beta],i_][x_]:=Subscript[\[Beta],i][x[[i]]]; 
SubValues[Subscript] 
Out[26]= {HoldPattern[Subscript[\[Beta], i_][x_]]:>Subscript[\[Beta], i][x[[i]]]} 

只需使用=.清除:

In[27]:= Subscript[\[Beta],i_][x_]=. 
SubValues[Subscript] 
Out[28]= {} 

HTH