這是一個分支和延伸:Is it safe to turn off Pattern::patv?處理靈活的參數在Mathematica函數
許多內置數學功能允許靈活的參數。在用戶定義的函數中,我一直使用Alternatives
來達到這個目的,但是對引用問題的評論和回答表明這至少是非標準的,也許是不可取的。
讓我定義一個虛擬函數foo
爲例。
Off[Pattern::patv]
p = {_?NumericQ, _?NumericQ};
foo[
{x : p ..} | x : p,
{y__} | y__,
ops : OptionsPattern[]
] /; Max[y] <= 10 := bar[#, y, ops] & /@ {x}
foo
接受,爲了:
- 一個對象匹配PATTEN
p
,或者這樣的對象的列表。 - 爲10的最大值的一組隱式數字對象,無論是作爲一個列表或參數的序列(如書面這些對象本身可以是具有爲10的最大值的數值的列表)匹配
OptionsPattern[]
- 選項
如果未滿足這些條件中的任何一個,則返回foo[args]
未評估。
使用Alternatives
(|
)的兩種模式是最常見的情況,但它們不是排他性的。
我很想看看foo
應該如何實現。
完成此操作的標準方法是什麼?
它比使用
Alternatives
有什麼優勢?客觀上是否更容易閱讀?
感謝您的回答。請包括一些代碼示例,具體說明如何實現「如果未滿足這些條件中的任何一個,foo [args]將返回未評估。」與方法1和2(我知道列昂尼德的方法,但它是你使用?) – 2011-12-16 18:10:53