2016-11-22 82 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 - >α]