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 を持つ必要はない.より一般的には,デフォルト値は,実際に存在する任意の引数については,任意のパターンが要求するものと一致する必要はない. »
  • デフォルト値が組込みになった関数には,PlusTimesそしてPowerが含まれる. »
  • LongestShortestOptionalと組み合せることで特別の意味を持つ.Longest[patt:def]は,まず patt を使ってパターンを試し,その後ではじめて def を使ってパターンを試す.Shortest[patt:def]はその逆で,まず def を使って試し,その後ではじめて patt を使う.
  • 明示的なLongestまたはShortestなしでOptionalを使うと,事実上Longestでラップされる.

例題

すべて開くすべて閉じる

  (1)

第2引数のデフォルト値付きで関数を定義する:

両方の引数が明示的に指定された関数を使う:

これで,第2引数はデフォルト値を持つと解釈される:

スコープ  (5)

ReplaceAllを含む任意のパターンマッチング関数でOptionalを使う:

Cases

MatchQ

OptionalBlankSequenceと一緒に使う:

デフォルトが使われる:

与えられた値が使われる:

一連の値がxにバインドされる:

Optionalの第1引数はBlankの形式だけでなく任意のパターンでよい:

関数のデフォルト値を指定する:

デフォルトの引数を使って下向きの値を定義する:

第3引数が与えられたときはその値が使われる:

第3引数がないときは,値が関数のデフォルトから取られる:

任意の引数のデフォルト値はパターンにマッチしなくてもよい:

5はパターンにマッチする:

文字列"xyz"はパターンにマッチしない:

引数が指定されていなければ,たとえパターンにマッチしなくてもデフォルト値が返される:

特性と関係  (6)

三部形式 sym:pat:def の頭部はOptionalである:

s_:ds:_:d は同一である:

明示的なデフォルトが与えられていないとき,デフォルトは頭部のDefaultValuesから推測される:

1DefaultValues[Times]からのものである:

常に明示的なデフォルトを与えることができる:

短縮形 x_.Optional[Pattern[x,Blank[]]と等価である:

デフォルトの引数を制限すると,不適合な引数に対してはパターンが完全に一致しなくなる:

引数が完全に欠落している場合にのみデフォルト値が使われる:

Optionalはデフォルト値が評価されるのを妨げない:

したがって, fのすべての呼び出しに同じデフォルト値が使われる:

HoldPatternを使ってデフォルト値が使用されるまで評価を遅延させる:

gの各呼び出しに一意のデフォルト値が使われる:

BlankSequenceOptionalを使って関数を定義する.この関数はデフォルト値を使って評価する:

BlankNullSequenceを使って関数を定義する.この関数は評価に際して値を使わない:

BlankNullSequenceは引数の長さが0にマッチするので,x___:d は決して d を使わない:

考えられる問題  (3)

入力 s:vsBlank[]またはPattern[sym,Blank[]]についての特殊な入力形式であるときにのみ頭部がOptionalになる:

BlankSequence[]BlankNullSequence[]も使うことができる:

s が記号なら s:vPattern[s,v]を表す:

s が他の任意の式ならこの形式は有効な入力ではない:

ConditionPatternTestOptionalには適用できない:

代りにOptionalの第1引数にテストを適用する:

関数 fg は与えられる引数の数が0でも1でも予想通りの動作をする:

PatternOptionalオブジェクトにバインドすることはできない:

代りに第1引数内のパターンをOptionalにする:

パターンが一致しない場合は記号xがデフォルト値にバインドされる:

Optionalオブジェクトは三部形式 s:p:d を使ってより簡潔に書くことができる:

Wolfram Research (1988), Optional, Wolfram言語関数, https://reference.wolfram.com/language/ref/Optional.html (2015年に更新).

テキスト

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

BibTeX

@misc{reference.wolfram_2024_optional, author="Wolfram Research", title="{Optional}", year="2015", howpublished="\url{https://reference.wolfram.com/language/ref/Optional.html}", note=[Accessed: 22-November-2024 ]}

BibLaTeX

@online{reference.wolfram_2024_optional, organization={Wolfram Research}, title={Optional}, year={2015}, url={https://reference.wolfram.com/language/ref/Optional.html}, note=[Accessed: 22-November-2024 ]}