Объединение 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]

Другие вопросы по тегам