Optional
patt:def またはOptional[patt,def]
パターンオブジェクトで,patt の形式の式を表し,これが与えられていない場合にはデフォルト値の def で置き換えられる.
詳細
- Optionalは,パターンで表された関数における「任意の引数」を指定する.パターンオブジェクト patt は,引数が取るべき形式を与える.式 def は,この引数が与えられていない場合に使用する「デフォルト値」を与える.
- s_:def の形式は,Optional[s_,def]と同値である.また,この形式は s:_:defとも同値である.この場合,s が記号であるため,シンタックス上の曖昧さはない. »
- 特殊形式 s_.は,Optional[s_]と同値で関数の引数を表すことができる.これが指定されないと出現する関数のために大域的に指定されたデフォルト値によって置き換えられる. »
- Default[f,…]に与えられた値は,_.が f の引数として現れた場合に使用されるデフォルト値を指定する.Default[f,…]の割当ては,最初に_.が f の引数として現れるよりも前に行われなければならない. »
- Optional[s_h]は,与えられなくてもよい関数を表すが,与えられた場合には,頭部 h を持つことを条件とする.この場合,簡素なシンタックス上の形式が存在しない. »s
- Optional[s_h,def]における値 def は頭部 h を持つ必要はない.より一般的には,デフォルト値は,実際に存在する任意の引数については,任意のパターンが要求するものと一致する必要はない. »
- デフォルト値が組込みになった関数には,Plus,TimesそしてPowerが含まれる. »
- LongestとShortestはOptionalと組み合せることで特別の意味を持つ.Longest[patt:def]は,まず patt を使ってパターンを試し,その後ではじめて def を使ってパターンを試す.Shortest[patt:def]はその逆で,まず def を使って試し,その後ではじめて patt を使う.
- 明示的なLongestまたはShortestなしでOptionalを使うと,事実上Longestでラップされる.
例題
すべて開くすべて閉じるスコープ (5)
ReplaceAllを含む任意のパターンマッチング関数でOptionalを使う:
OptionalをBlankSequenceと一緒に使う:
特性と関係 (6)
三部形式 sym:pat:def の頭部はOptionalである:
明示的なデフォルトが与えられていないとき,デフォルトは頭部のDefaultValuesから推測される:
1はDefaultValues[Times]からのものである:
短縮形 x_.はOptional[Pattern[x,Blank[]]と等価である:
デフォルトの引数を制限すると,不適合な引数に対してはパターンが完全に一致しなくなる:
Optionalはデフォルト値が評価されるのを妨げない:
したがって, fのすべての呼び出しに同じデフォルト値が使われる:
HoldPatternを使ってデフォルト値が使用されるまで評価を遅延させる:
BlankSequenceとOptionalを使って関数を定義する.この関数はデフォルト値を使って評価する:
BlankNullSequenceを使って関数を定義する.この関数は評価に際して値を使わない:
BlankNullSequenceは引数の長さが0にマッチするので,x___:d は決して d を使わない:
考えられる問題 (3)
入力 s:v は s がBlank[…]またはPattern[sym,Blank[…]]についての特殊な入力形式であるときにのみ頭部がOptionalになる:
BlankSequence[…]とBlankNullSequence[…]も使うことができる:
s が記号なら s:v はPattern[s,v]を表す:
ConditionとPatternTestはOptionalには適用できない:
代りにOptionalの第1引数にテストを適用する:
関数 f と g は与えられる引数の数が0でも1でも予想通りの動作をする:
PatternをOptionalオブジェクトにバインドすることはできない:
代りに第1引数内のパターンをOptionalにする:
パターンが一致しない場合は記号xがデフォルト値にバインドされる:
Optionalオブジェクトは三部形式 s:p:d を使ってより簡潔に書くことができる:
テキスト
Wolfram Research (1988), Optional, Wolfram言語関数, https://reference.wolfram.com/language/ref/Optional.html (2015年に更新).
CMS
Wolfram Language. 1988. "Optional." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2015. https://reference.wolfram.com/language/ref/Optional.html.
APA
Wolfram Language. (1988). Optional. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/Optional.html