Shortest

Shortest[p]

is a pattern object that matches the shortest sequence consistent with the pattern p.

Details

  • Shortest works for both ordinary expression patterns and string patterns.
  • If several Shortest objects occur in the same expression, those that appear first are given higher priority to match shortest sequences.
  • Shortest[p,pri] is given priority pri to be the shortest sequence. Matches for shortest sequences are tried first for Shortest objects with higher priorities.
  • Priorities can be any expression, and are ordered in standard Wolfram Language Sort order. Shortest[p] specifies the highest possible priority.
  • Shortest objects with equal priorities are tried in the order they appear in the expression.
  • If no explicit Shortest or Longest is given, ordinary expression patterns are normally effectively assumed to be Shortest[p], while string patterns are assumed to be Longest[p]. »
  • Shortest has special meaning when combined with Optional. Shortest[patt:def] first attempts to match using the value def and only then tries the pattern patt. If Optional is used with no explicit Longest or Shortest, it is effectively wrapped in Longest. »
  • For ordinary expressions, Shortest[p] specifies that not just p itself, but also all parts of p should match the shortest sequences.
  • Shortest[p] corresponds to a "non-greedy pattern".
  • Shortest[p] may not correspond to the absolutely shortest expression matching p if there are additional constraints elsewhere in the pattern.

Examples

open allclose all

Basic Examples  (1)

Control ambiguous matches by using Shortest:

Scope  (2)

Shortest works with string patterns:

Use priorities to affect ambiguous choices:

Applications  (1)

Consider the following variable-length argument function:

Use Shortest to express it as one pattern:

Properties & Relations  (4)

For expressions, when a pattern has consecutive sequences, the first one is effectively wrapped in Shortest:

For string patterns, Shortest provides "non-greedy" or "lazy" matches of all minimum-length matches:

For ordinary patterns, most patterns are effectively wrapped in Shortest:

String patterns are effectively wrapped in Longest:

By default, patt:def first attempts the pattern using patt and only then def:

When Shortest is combined with Optional, the order is reversed:

Possible Issues  (3)

When there are additional constraints, Shortest may not match the absolute shortest sequence:

For string patterns, Shortest will match all minimal substrings, not just the absolute shortest match:

Priorities are not supported in string expressions:

Wolfram Research (2007), Shortest, Wolfram Language function, https://reference.wolfram.com/language/ref/Shortest.html.

Text

Wolfram Research (2007), Shortest, Wolfram Language function, https://reference.wolfram.com/language/ref/Shortest.html.

CMS

Wolfram Language. 2007. "Shortest." Wolfram Language & System Documentation Center. Wolfram Research. https://reference.wolfram.com/language/ref/Shortest.html.

APA

Wolfram Language. (2007). Shortest. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/Shortest.html

BibTeX

@misc{reference.wolfram_2023_shortest, author="Wolfram Research", title="{Shortest}", year="2007", howpublished="\url{https://reference.wolfram.com/language/ref/Shortest.html}", note=[Accessed: 01-March-2024 ]}

BibLaTeX

@online{reference.wolfram_2023_shortest, organization={Wolfram Research}, title={Shortest}, year={2007}, url={https://reference.wolfram.com/language/ref/Shortest.html}, note=[Accessed: 01-March-2024 ]}