将 OptionsPattern 与模式约束相结合
Combining OptionsPattern with Pattern Constraints
我想定义带有命名可选参数的函数,并将这些参数限制为具有特定头部的表达式。使用未命名的可选参数很容易做到这一点。例如:
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
保持未计算状态。有什么办法吗?
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]
我想定义带有命名可选参数的函数,并将这些参数限制为具有特定头部的表达式。使用未命名的可选参数很容易做到这一点。例如:
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
保持未计算状态。有什么办法吗?
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]