Ellipsis (computer programming)
![]() | This article needs additional citations for verification. (September 2014) |
In computer programming, ellipsis notation (.. or ...) is used to denote ranges, an unspecified number of arguments, or a parent directory. Most programming languages require the ellipsis to be written as a series of periods; a single (Unicode) ellipsis character cannot be used.
Ranges[]
In some programming languages (including Ada, Perl, Ruby, Apache Groovy, Kotlin, Haskell, and Pascal), a shortened two-dot ellipsis is used to represent a range of values given two endpoints; for example, to iterate through a list of integers between 1 and 100 inclusive in Perl:
foreach (1..100)
In Ruby the ...
operator denotes a half-open range, i.e. that includes the start value but not the end value.
In Rust the ..=
operator denotes an inclusive range for cases in matches and the ..
operator represents a range not including the end value.
Perl and Ruby overload the ".." operator in scalar context as a flip-flop operator - a stateful bistable Boolean test, roughly equivalent to "true while x but not yet y", similarly to the "," operator in sed and AWK.[1]
GNU C compatible compilers have an extension to the C and C++ language to allow case ranges in switch statements:
switch(u) {
case 0 ... 0x7F : putchar(c); break;
case 0x80 ... 0x7FF : putchar(0xC0 + c>>6); putchar( 0x80 + c&0x3f); break;
case 0x800 ... 0xFFFF : putchar(0xE0 + c>>12); putchar( 0x80 + (c>>6)&0x3f); putchar( 0x80 + (c>>12) ); break;
default: error("not supported!");
}
Additionally, GNU C allows a similar range syntax for designated initializers, available in the C language only:
int array[10] = { [0...5] = 1 };
Delphi / Turbo Pascal / Free Pascal:
var FilteredChars: set of [#0..#32,#127,'a'..'z'];
var CheckedItems: set of [4,10..38,241,58];
In the Unified Modeling Language (UML), a two-character ellipsis is used to indicate variable cardinality of an association. For example, a cardinality of 1..* means that the number of elements aggregated in an association can range from 1 to infinity (a usage equivalent to Kleene plus).
Parent directory[]
On Windows and Unix-like operating systems, ".." is used to access the parent directory in a path.
Incomplete code[]
In Perl[2] and Raku[3] the 3-character ellipsis is also known as the "yada yada yada" operator and, similarly to its linguistic meaning, serves as a "stand-in" for code to be inserted later.
Python3 also allows the 3-character ellipsis to be used as an expressive place-holder for code to be inserted later.
Variable number of parameters[]
C and C++[]
In the C programming language, an ellipsis is used to represent a variable number of parameters to a function. For example:
int printf( const char* format, ... );
[4]
The above function in C could then be called with different types and numbers of parameters such as:
printf("numbers %i %i %i", 5, 10, 15);
and
printf("input string %s, %f", "another string", 0.5);
C99 introduced macros with a variable number of arguments.[5]
C++11 included the C99 preprocessor,[6] and also introduced templates with a variable number of arguments.[7]
Java[]
As of version 1.5, Java has adopted this "varargs" functionality. For example:
public int func(int num, String... strings)
PHP[]
PHP 5.6 supports[8] use of ellipsis to define an explicitly variadic function, where ...
before an argument in a function definition means that arguments from that point on will be collected into an array. For example:
function variadic_function($a, $b, ...$other)
{
return $other;
}
var_dump(variadic_function(1, 2, 3, 4, 5));
Produces this output:
array(3) {
[0]=>
int(3)
[1]=>
int(4)
[2]=>
int(5)
}
Multiple dimensions[]
In Python, particularly in NumPy, an ellipsis is used for slicing an arbitrary number of dimensions for a high-dimensional array:[9]
>>> import numpy as np
>>> t = np.random.rand(2, 3, 4, 5)
>>> t[..., 0].shape # select 1st element from last dimension, copy rest
(2, 3, 4)
>>> t[0, ...].shape # select 1st element from first dimension, copy rest
(3, 4, 5)
Other semantics[]
In MATLAB, a three-character ellipsis is used to indicate line continuation,[10] making the sequence of lines
x = [ 1 2 3 ...
4 5 6 ];
semantically equivalent to the single line
x = [ 1 2 3 4 5 6 ];
In Raku an actual Unicode (U+2026) ellipsis (…) character is used to serve as a type of marker in a format string.[11]
References[]
- ^ perlop - perldoc.perl.org
- ^ https://perldoc.perl.org/perlsyn.html#The-Ellipsis-Statement
- ^ https://doc.perl6.org/language/operators#listop_...
- ^ http://www.cplusplus.com/reference/cstdio/printf/
- ^ Variadic Macros - Using the GNU Compiler Collection (GCC)
- ^ Working draft changes for C99 preprocessor synchronization - http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1653.htm
- ^ "Working Draft, Standard for Programming Language C++" (PDF).: 14.5.3 Variadic templates
- ^ https://wiki.php.net/rfc/variadics
- ^ http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html
- ^ Mathworks.com
- ^ Exegesis 7: Formats - perl6 Archived 2011-06-15 at the Wayback Machine[self-published source?]
- Operators (programming)