2016-11-22 9 views
1

명명 된 선택적 인수를 사용하여 함수를 정의하고 이러한 인수를 특정 머리를 가진 표현식으로 제한하고자합니다. 이름없는 선택적 인수를 사용하면이 작업을 쉽게 수행 할 수 있습니다. 예를 들어패턴 제약 조건과 옵션 패턴 결합

succ1[n_Integer: 0] := n + 1 

succ1[] 
succ1[4] 
succ1[a] 

원하는 출력으로서

1 
5 
succ1[a] 

을 준다. 그러나, 나는 명명 된 인수와 같은을 달성하는 방법을 알아낼 수 없습니다 : 앞의 코드는 succ2[n -> a]의 출력으로 1 + a을 제공

Options[succ2] = {n -> 0} 
succ2[OptionsPattern[]] := OptionValue[n] + 1 

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

. 내가 원하는 것은 선택 인수를 n -> _Integer (Rule[n, _Integer])으로 제한하여 n -> a이 평가되지 않도록 유지하는 것입니다. 그것을 할 방법이 있습니까? [N -> A]

답변

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

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

1

5

succ2