
30
|
第二章
而另一種定義方式稍嫌冗長,但當 upvalue 的歸屬權模糊不清的情況下,還蠻方便的。
例如:定義四元數與複數的加法時,若使用前述第一種方式定義 upvalue,此時 upvalue
應屬於四元數或複數並未清楚界定,則可使用
TagSet
及
TagSetDelayed
語法明確指定屬
於
四元數
quaternion
的 upvalue,而非複數
Complex
。[Page-029]
upvalue 的語 法 解決 了 兩個 問 題:首 先,你 不 必解 除 保護 Mathematica 的內 建指 令;
其次,設定 upvalue 可以避免 Mathematica 每次執行更改過的內建指令時(如
Plus
或
Times
指令),均優先檢查自訂定義,而導致效能變差的情況。藉由新物件的 upvalue
設定,Mathematica 只 有 在新 物 件出 現 的情 況 下才 須 考慮 其 操作 定 義,當 upvalue 與
downvalue 同時存在的情況下,upvalue 有較高的優先權,但你應盡量避免這種情況。
函數屬性
Mathematica 根據一組事先規範的函數屬性控制函數行為,使用者應熟悉這些屬性,
因 為 自 訂 函 數 要 輸 出 正 確 的 結 果 經 常 需 要 這 些 函 數 屬 性 的 配 合。
Attributes[f]
、
SetAttributes[f,attr]
與
ClearAttributes[f,attr]
指 令 分 別 對 函 數 f 的 屬 性 進 行 查
詢、設定