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 -> _Integer( Rule[n, _Integer]) 以便n -> a保持未评估。有什么办法吗?

4

1 回答 1

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

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

1

5

succ2[n -> a]

于 2016-11-22T18:08:58.683 回答