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

前のコードがsucc2[n -> a]の出力として1 + aできます。私が望むのは、​​が評価されないように、オプションの引数をn -> _IntegerRule[n, _Integer])に制限することです。それを行う方法はありますか? [N - > A]

答えて

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

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

SUCC2

関連する問題