2016-11-22 83 views
1

我想用命名可選參數定義函數,並將這些參數限制爲具有特定標題的表達式。這很容易處理未命名的可選參數。例如:將模式約束與選項模式相結合

succ1[n_Integer: 0] := n + 1 

succ1[] 
succ1[4] 
succ1[a] 

給出

1 
5 
succ1[a] 

如所期望的輸出。不過,我可以不知道如何來達到同樣的使用參數名:

Options[succ2] = {n -> 0} 
succ2[OptionsPattern[]] := OptionValue[n] + 1 

succ2[] 
succ2[n -> 4] 
succ2[n -> a] 

上面的代碼給1 + a作爲succ2[n -> a]輸出。我想要的是將可選參數限制爲n -> _IntegerRule[n, _Integer]),以便​​保持未評估狀態。有什麼辦法可以做到嗎?

回答

2
Options[succ2] = {n -> 0} 
succ2[OptionsPattern[]] := 
    OptionValue[n] + 1 /; Head[OptionValue[n]] === Integer 

succ2[] 
succ2[n -> 4] 
succ2[n -> a] 

succ2 [N - >α]