Объединение OptionsPattern с шаблонными ограничениями
Я хотел бы определить функции с именованными необязательными аргументами и ограничить эти аргументы выражениями с конкретными заголовками. Это легко сделать с помощью неназванных необязательных аргументов. Например:
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
остается неоцененным. Есть ли способ сделать это?
1 ответ
Решение
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]