WerteValues

Ein Wert steht für Daten, die durch die Auswertung eines Ausdrucks erzeugt werden.A value is data produced by evaluating an expression. In diesem Abschnitt werden die Arten der Werte in der M-Sprache beschrieben.This section describes the kinds of values in the M language. Jede Art von Wert ist einer Literalsyntax zugeordnet. Dabei handelt es sich um eine Gruppe von Werten vom selben Typ, Operatoren, die für diese Werte definiert wurden, und einen intrinsischen Typ, der neu erstellten Werten zugeordnet wird.Each kind of value is associated with a literal syntax, a set of values that are of that kind, a set of operators defined over that set of values, and an intrinsic type ascribed to newly constructed values.

ArtKind LiteralLiteral
NULLNull null
LogischLogical true    false
NumberNumber 0    1    -1    1.5    2.3e-5
TimeTime #time(09,15,00)
DateDate #date(2013,02,26)
DateTimeDateTime #datetime(2013,02,26, 09,15,00)
DateTimeZoneDateTimeZone #datetimezone(2013,02,26, 09,15,00, 09,00)
DurationDuration #duration(0,1,30,0)
TextText "hello"
Binär (Binary)Binary #binary("AQID")
ListeList {1, 2, 3}
DatensatzRecord [ A = 1, B = 2 ]
TabelleTable #table({"X","Y"},{{0,1},{1,0}})
FunctionFunction (x) => x + 1
TypType type { number }    type table [ A = any, B = text ]

In den folgenden Abschnitten werden alle Arten der Werte ausführlich behandelt.The following sections cover each value kind in detail. Typen und die Typzuordnung werden formell in Typen definiert.Types and type ascription are defined formally in Types. Funktionswerte werden in Funktionen definiert.Function values are defined in Functions. In den folgenden Abschnitten werden die Operatoren für alle Arten von Werten definiert und Beispiele veranschaulicht.The following sections list the operators defined for each value kind and give examples. Die vollständige Definition der Operatorsemantik finden Sie unter Operatoren.The full definition of operator semantics follows in Operators.

NULLNull

NULL-Werte werden verwendet, um das Fehlen eines Werts oder einen Wert mit unbestimmtem oder unbekanntem Zustand darzustellen.A null value is used to represent the absence of a value, or a value of indeterminate or unknown state. NULL-Werte werden mit dem Literal null geschrieben.A null value is written using the literal null. Die folgenden Operatoren sind für NULL-Werte definiert:The following operators are defined for null values:

OperatorOperator ErgebnisResult
x > y Größer alsGreater than
x >= y Größer als oder gleichGreater than or equal
x < y Kleiner alsLess than
x <= y Kleiner als oder gleichLess than or equal
x = y GleichEqual
x <> y UngleichNot equal

Der native Typ des Werts null ist der intrinsische Typ null.The native type of the null value is the intrinsic type null.

Logik (Logical)Logical

Logische Werte werden für boolesche Vorgänge verwendet, die die Werte TRUE oder FALSE aufweisen.A logical value is used for Boolean operations has the value true or false. Logische Werte werden mit den Literalen true und false geschrieben.A logical value is written using the literals true and false. Die folgenden Operatoren sind für logische Werte definiert:The following operators are defined for logical values:

OperatorOperator ErgebnisResult
x > y Größer alsGreater than
x >= y Größer als oder gleichGreater than or equal
x < y Kleiner alsLess than
x <= y Kleiner als oder gleichLess than or equal
x = y GleichEqual
x <> y UngleichNot equal
x or y Bedingtes logisches ORConditional logical OR
x and y Bedingtes logisches ANDConditional logical AND
not x Logisches NOTLogical NOT

Der native Typ der beiden logischen Werte (true und false) ist der intrinsische Typ logical.The native type of both logical values (true and false) is the intrinsic type logical.

ZahlNumber

Zahlenwerte werden für numerische und arithmetische Vorgänge verwendet.A number value is used for numeric and arithmetic operations. Im Folgenden finden Sie Beispiele für Zahlenliterale:The following are examples of number literals:

3.14  // Fractional number 
-1.5  // Fractional number 
1.0e3 // Fractional number with exponent
123   // Whole number 
1e3   // Whole number with exponent 
0xff  // Whole number in hex (255)

Eine Zahl wird mindestens mit einer Genauigkeit von Double dargestellt (kann aber mehr Genauigkeit beibehalten).A number is represented with at least the precision of a Double (but may retain more precision). Die Double-Darstellung entspricht dem IEEE 64-Bit-Standard für doppelte Genauigkeit für binäre Gleitkommaarithmetik gemäß der Definition im Standard [IEEE 754-2008].The Double representation is congruent with the IEEE 64-bit double precision standard for binary floating point arithmetic defined in [IEEE 754-2008]. (Die Double-Darstellung verfügt über einen dynamischen Bereich von ungefähr 5,0 × 10324 bis 1,7 × 10308 mit einer Genauigkeit von 15-16 Ziffern.)(The Double representation have an approximate dynamic range from 5.0 x 10324 to 1.7 x 10308 with a precision of 15-16 digits.)

Die folgenden speziellen Werte werden auch auch_Zahlenwerte_ betrachtet:The following special values are also considered to be number values:

  • Positive null (+0) und negative null (-0):Positive zero and negative zero. In den meisten Fällen verhält sich die positive und die negative null genau wie der einfache Wert null (0), jedoch unterscheiden bestimmte Vorgänge zwischen den beiden.In most situations, positive zero and negative zero behave identically as the simple value zero, but certain operations distinguish between the two.

  • Positiv unendlich (#infinity) und negativ unendlich (-#infinity):Positive infinity (#infinity) and negative infinity (-#infinity). Unendlich ist das Ergebnis von Vorgängen wie das Teilen einer Zahl ungleich null (0) durch null (0).Infinities are produced by such operations as dividing a non-zero number by zero. 1.0 / 0.0 ergibt beispielsweise positiv unendlich und -1.0 / 0.0 negativ unendlich.For example, 1.0 / 0.0 yields positive infinity, and -1.0 / 0.0 yields negative infinity.

  • Der Wert Not-a-Number (#nan), der häufig als NaN abgekürzt wird:The Not-a-Number value (#nan), often abbreviated NaN. NaN-Werte werden durch ungültige Gleitkommavorgänge erzeugt, z. B. beim Teilen von null durch null.NaNs are produced by invalid floating-point operations, such as dividing zero by zero.

Binäre mathematische Vorgänge werden mithilfe einer Genauigkeit durchgeführt.Binary mathematical operations are performed using a Precision. Die Genauigkeit bestimmt die Domäne, mit der die Operanden gerundet werden, und die Domäne, in der der Vorgang durchgeführt wird.The precision determines the domain to which the operands are rounded and the domain in which the operation is performed. Wenn keine explizit angegebene Genauigkeit vorliegt, werden solche Vorgänge mit doppelter Genauigkeit durchgeführt.In the absence of an explicitly specified precision, such operations are performed using Double Precision.

  • Wenn das Ergebnis eines mathematischen Vorgangs zu klein für das Zielformat ist, ist das Ergebnis des Vorgangs positiv oder negativ null.If the result of a mathematical operation is too small for the destination format, the result of the operation becomes positive zero or negative zero.

  • Wenn das Ergebnis eines mathematischen Vorgangs zu groß für das Zielformat ist, ist das Ergebnis des Vorgangs positiv oder negativ unendlich.If the result of a mathematical operation is too large for the destination format, the result of the operation becomes positive infinity or negative infinity.

  • Wenn ein mathematischer Vorgang ungültig ist, ist das Ergebnis des Vorgangs NaN.If a mathematical operation is invalid, the result of the operation becomes NaN.

  • Wenn einer der Operanden oder beide Operanden eines Gleitkommavorgangs NaN ergibt, ist das Ergebnis des Vorgangs NaN.If one or both operands of a floating-point operation is NaN, the result of the operation becomes NaN.

Die folgenden Operatoren sind für Zahlenwerte definiert:The following operators are defined for number values:

OperatorOperator ErgebnisResult
x > y Größer alsGreater than
x >= y Größer als oder gleichGreater than or equal
x < y Kleiner alsLess than
x <= y Kleiner als oder gleichLess than or equal
x = y GleichEqual
x <> y UngleichNot equal
x + y SummeSum
x - y UnterschiedDifference
x * y ProductProduct
x / y QuotientQuotient
+x Unäres PlusUnary plus
-x NegationNegation

Der native Typ von Zahlenwerten ist der intrinsische Typ number.The native type of number values is the intrinsic type number.

ZeitTime

time-Werte speichern eine nicht transparente Darstellung der Uhrzeit.A time value stores an opaque representation of time of day. Die Zeit wird als Anzahl des Werts ticks since midnight codiert. Dabei wird die Anzahl der Ticks alle 100 Nanosekunden gezählt, die in einem Zeitraum von 24 Stunden verstrichen sind.A time is encoded as the number of ticks since midnight, which counts the number of 100-nanosecond ticks that have elapsed on a 24-hour clock. Die maximale Anzahl von ticks since midnight entspricht 23:59:59.9999999 Stunden.The maximum number of ticks since midnight corresponds to 23:59:59.9999999 hours.

Die time-Werte können mit der intrinsischen Funktion „#time“ erzeugt werden:Time values may be constructed using the #time instrinsic.

#time(hour, minute, second)

Folgendes muss gelten, da sonst ein Fehler mit dem Ursachencode Expression.Error ausgelöst wird:The following must hold or an error with reason code Expression.Error is raised:

0 ≤ Stunde ≤ 240 ≤ hour ≤ 24
0 ≤ Minute ≤ 590 ≤ minute ≤ 59
0 ≤ Sekunde ≤ 590 ≤ second ≤ 59

Außerdem müssen die Werte für Minuten und Sekunden „0“ (null) entsprechen, wenn der Wert für Stunden „24“ ist.In addition, if hour = 24, then minute and second must be zero.

Die folgenden Operatoren sind für time-Werte definiert:The following operators are defined for time values:

OperatorOperator ErgebnisResult
x = y GleichEqual
x <> y UngleichNot equal
x >= y Größer als oder gleichGreater than or equal
x > y Größer alsGreater than
x < y Kleiner alsLess than
x <= y Kleiner als oder gleichLess than or equal

Die folgenden Operatoren lassen zu, dass ein Operand oder beide Operanden ein Datum darstellen:The following operators permit one or both of their operands to be a date:

OperatorOperator Linker OperandLeft Operand Rechter OperandRight Operand BedeutungMeaning
x + y time duration Date-Offset nach durationDate offset by duration
x + y duration time Date-Offset nach durationDate offset by duration
x - y time duration Date-Offset nach negierter durationDate offset by negated duration
x - y time time Duration zwischen datesDuration between dates
x & y date time zusammengeführte datetimeMerged datetime

Der native Typ von time-Werten ist der intrinsische Typ time.The native type of time values is the intrinsic type time.

DatumDate

date-Werte speichern eine nicht transparente Darstellung eines spezifischen Tages.A date value stores an opaque representation of a specific day. Ein Datum wird als Zahl des Werts days since epoch codiert. Der Wert beginnt am 1. Januar 0001 nach unserer Zeitrechnung im gregorianischen Kalender.A date is encoded as a number of days since epoch, starting from January 1, 0001 Common Era on the Gregorian calendar. Der maximale Wert für „days since epoch“ lautet „3652058“ und entspricht dem 31. Dezember 9999.The maximum number of days since epoch is 3652058, corresponding to December 31, 9999.

Die date-Werte können mit der intrinsischen Funktion #date erzeugt werden:Date values may be constructed using the #date intrinsic.

#date(year, month, day)

Folgendes muss gelten, da sonst ein Fehler mit dem Ursachencode Expression.Error ausgelöst wird:The following must hold or an error with reason code Expression.Error is raised:

1 ≤ Jahr ≤ 99991 ≤ year ≤ 9999
1 ≤ Monat ≤ 121 ≤ month ≤ 12
1 ≤ Tag ≤ 311 ≤ day ≤ 31

Darüber hinaus muss der Tag für den jeweiligen Monat und das Jahr gültig sein.In addition, the day must be valid for the chosen month and year.

Die folgenden Operatoren sind für date-Werte definiert:The following operators are defined for date values:

OperatorOperator ErgebnisResult
x = y GleichEqual
x <> y UngleichNot equal
x >= y Größer als oder gleichGreater than or equal
x > y Größer alsGreater than
x < y Kleiner alsLess than
x <= y Kleiner als oder gleichLess than or equal

Die folgenden Operatoren lassen zu, dass ein Operand oder beide Operanden ein Datum darstellen:The following operators permit one or both of their operands to be a date:

OperatorOperator Linker OperandLeft Operand Rechter OperandRight Operand BedeutungMeaning
x + y date duration Date-Offset nach durationDate offset by duration
x + y duration date Date-Offset nach durationDate offset by duration
x - y date duration Date-Offset nach negierter durationDate offset by negated duration
x - y date date Duration zwischen datesDuration between dates
x & y date time zusammengeführte datetimeMerged datetime

Der native Typ von date-Werten ist der intrinsische Typ date.The native type of date values is the intrinsic type date.

DateTimeDateTime

datetime-Werte enthalten sowohl ein Datum als auch eine Uhrzeit.A datetime value contains both a date and time.

Die datetime-Werte können mit der intrinsischen Funktion #datetime erzeugt werden:DateTime values may be constructed using the #datetime intrinsic.

#datetime(year, month, day, hour, minute, second)

Folgendes muss gelten, da sonst ein Fehler mit dem Ursachencode „Expression.Error“ ausgelöst wird: 1 ≤ Jahr ≤ 9999The following must hold or an error with reason code Expression.Error is raised: 1 ≤ year ≤ 9999
1 ≤ Monat ≤ 121 ≤ month ≤ 12
1 ≤ Tag ≤ 311 ≤ day ≤ 31
0 ≤ Stunde ≤ 230 ≤ hour ≤ 23
0 ≤ Minute ≤ 590 ≤ minute ≤ 59
0 ≤ Sekunde ≤ 590 ≤ second ≤ 59

Darüber hinaus muss der Tag für den jeweiligen Monat und das Jahr gültig sein.In addition, the day must be valid for the chosen month and year.

Die folgenden Operatoren sind für datetime-Werte definiert:The following operators are defined for datetime values:

OperatorOperator ErgebnisResult
x = y GleichEqual
x <> y UngleichNot equal
x >= y Größer als oder gleichGreater than or equal
x > y Größer alsGreater than
x < y Kleiner alsLess than
x <= y Kleiner als oder gleichLess than or equal

Die folgenden Operatoren lassen zu, dass ein Operand oder beide Operanden einen datetime-Wert darstellen:The following operators permit one or both of their operands to be a datetime:

OperatorOperator Linker OperandLeft Operand Rechter OperandRight Operand BedeutungMeaning
x + y datetime duration Date-Offset nach durationDatetime offset by duration
x + y duration datetime Date-Offset nach durationDatetime offset by duration
x - y datetime duration Datetime-Offset nach negierter durationDatetime offset by negated duration
x - y datetime datetime Duration zwischen datetimesDuration between datetimes

Der native Typ von datetime-Werten ist der intrinsische Typ datetime.The native type of datetime values is the intrinsic type datetime.

DatumZeitzone (DateTimeZone)DateTimeZone

datetimezone-Werte enthalten einen datetime-Wert und einen Wert für die Zeitzone.A datetimezone value contains a datetime and a timezone. Eine Zeitzone wird mit einem Wert für die Minutenabweichung von der koordinierten Weltzeit codiert. Dieser Wert entspricht der Anzahl der Minuten, um die der datetime-Wert von der koordinierten Weltzeit (UTC) abweichen sollte.A timezone is encoded as a number of minutes offset from UTC, which counts the number of minutes the time portion of the datetime should be offset from Universal Coordinated Time (UTC). Der Mindestwert für die Minutenabweichung von der koordinierten Weltzeit ist „-840“. Dieser Wert stellt eine UTC-Abweichung von „-14:00“ bzw. 14 Stunden vor UTC dar.The minimum number of minutes offset from UTC is -840, representing a UTC offset of -14:00, or fourteen hours earlier than UTC. Der Maximalwert für die Minutenabweichung von der koordinierten Weltzeit ist „840“. Dieser Wert stellt eine UTC-Abweichung von „14:00“ dar.The maximum number of minutes offset from UTC is 840, corresponding to a UTC offset of 14:00.

Die datetimezone-Werte können mit der intrinsischen Funktion #datetimezone erzeugt werden:DateTimeZone values may be constructed using the #datetimezone intrinsic.

#datetimezone(
       year, month, day,
       hour, minute, second,
       offset-hours, offset-minutes)

Folgendes muss gelten, da sonst ein Fehler mit dem Ursachencode Expression.Error ausgelöst wird:The following must hold or an error with reason code Expression.Error is raised:

1 ≤ Jahr ≤ 99991 ≤ year ≤ 9999
1 ≤ Monat ≤ 121 ≤ month ≤ 12
1 ≤ Tag ≤ 311 ≤ day ≤ 31
0 ≤ Stunde ≤ 230 ≤ hour ≤ 23
0 ≤ Minute ≤ 590 ≤ minute ≤ 59
0 ≤ Sekunde ≤ 590 ≤ second ≤ 59
-14 ≤ Stundenabweichung ≤ 14-14 ≤ offset-hours ≤ 14
-59 ≤ Minutenabweichung ≤ 59-59 ≤ offset-minutes ≤ 59

Darüber hinaus muss der Tag für den jeweiligen Monat und das Jahr gültig sein. Wenn die Stundenabweichung „14“ beträgt, muss die Minutenabweichung kleiner als oder gleich „0“ sein, und wenn die Stundenabweichung „-14“ beträgt, muss die Minutenabweichung größer als oder gleich „0“ sein.In addition, the day must be valid for the chosen month and year and, if offset-hours = 14, then offset-minutes <= 0 and, if offset-hours = -14, then offset-minutes >= 0.

Die folgenden Operatoren sind für datetimezone-Werte definiert:The following operators are defined for datetimezone values:

OperatorOperator ErgebnisResult
x = y GleichEqual
x <> y UngleichNot equal
x >= y Größer als oder gleichGreater than or equal
x > y Größer alsGreater than
x < y Kleiner alsLess than
x <= y Kleiner als oder gleichLess than or equal

Die folgenden Operatoren lassen zu, dass ein Operand oder beide Operanden einen datetimezone-Wert darstellen:The following operators permit one or both of their operands to be a datetimezone:

OperatorOperator Linker OperandLeft Operand Rechter OperandRight Operand BedeutungMeaning
x + y datetimezone duration Datetimezone-Offset nach durationDatetimezone offset by duration
x + y duration datetimezone Datetimezone-Offset nach durationDatetimezone offset by duration
x - y datetimezone duration Datetimezone-Offset nach negierter durationDatetimezone offset by negated duration
x - y datetimezone datetimezone Duration zwischen datetimezonesDuration between datetimezones

Der native Typ von datetimezone-Werten ist der intrinsische Typ datetimezone.The native type of datetimezone values is the intrinsic type datetimezone.

DauerDuration

duration-Werte speichern eine nicht transparente Darstellung der Distanz zwischen zwei Punkten auf einer Zeitskala nach Ticks von 100 Nanosekunden.A duration value stores an opaque representation of the distance between two points on a timeline measured 100-nanosecond ticks. Der Wert einer Dauer kann entweder positiv oder negativ sein. Positive Werte stellen Zeitfortschritt vorwärts dar, und negative Werte stellen Zeitfortschritt rückwärts dar.The magnitude of a duration can be either positive or negative, with positive values denoting progress forwards in time and negative values denoting progress backwards in time. Der Mindestwert für eine Dauer ist -9.223.372.036.854.775.808 Ticks. Dies entspricht 10.675.199 Tagen, 2 Stunden, 48 Minuten und 05,4775808 Sekunden in der Zeit zurück.The minimum value that can be stored in a duration is -9,223,372,036,854,775,808 ticks, or 10,675,199 days 2 hours 48 minutes 05.4775808 seconds backwards in time. Der Maximalwert für eine Dauer ist 9.223.372.036.854.775.807 Ticks. Dies entspricht 10.675.199 Tagen, 2 Stunden, 48 Minuten und 05,4775807 Sekunden in der Zeit vorwärts.The maximum value that can be stored in a duration is 9,223,372,036,854,775,807 ticks, or 10,675,199 days 2 hours 48 minutes 05.4775807 seconds forwards in time.

Die duration-Werte können mit der intrinsischen Funktion #duration erzeugt werden:Duration values may be constructed using the #duration intrinsic function:

#duration(0, 0, 0, 5.5)          // 5.5 seconds 
#duration(0, 0, 0, -5.5)         // -5.5 seconds 
#duration(0, 0, 5, 30)           // 5.5 minutes 
#duration(0, 0, 5, -30)          // 4.5 minutes 
#duration(0, 24, 0, 0)           // 1 day 
#duration(1, 0, 0, 0)            // 1 day

Die folgenden Operatoren sind für duration-Werte definiert:The following operators are defined on duration values:

OperatorOperator ErgebnisResult
x = y GleichEqual
x <> y UngleichNot equal
x >= y Größer als oder gleichGreater than or equal
x > y Größer alsGreater than
x < y Kleiner alsLess than
x <= y Kleiner als oder gleichLess than or equal

Außerdem lassen die folgenden Operatoren zu, dass ein Operand oder beide Operanden einen duration-Wert darstellen:Additionally, the following operators allow one or both of their operands to be a duration value:

OperatorOperator Linker OperandLeft Operand Rechter OperandRight Operand BedeutungMeaning
x + y datetime duration Date-Offset nach durationDatetime offset by duration
x + y duration datetime Date-Offset nach durationDatetime offset by duration
x + y duration duration Summe der durationsSum of durations
x - y datetime duration Datetime-Offset nach negierter durationDatetime offset by negated duration
x - y datetime datetime Duration zwischen datetimesDuration between datetimes
x - y duration duration Differenz der durationsDifference of durations
x * y duration number N-fach durationN times a duration
x * y number duration N-fach durationN times a duration
x / y duration number Teil von durationFraction of a duration

Der native Typ von duration-Werten ist der intrinsische Typ duration.The native type of duration values is the intrinsic type duration.

TextText

Textwerte stellen eine Sequenz aus Unicode-Zeichen dar.A text value represents a sequence of Unicode characters. Textwerte verfügen über ein Literalformat entsprechend der folgenden Grammatik:Text values have a literal form conformant to the following grammar:

_text-literal:_text-literal:
      " Textliteralzeichenopt "      " text-literal-charactersopt "
Textliteralzeichen:
      Textliteralzeichen Textliteralzeichenopt
Textliteralzeichen:
      Einzeltextzeichen
      Zeichenescapesequenz
      Escapesequenz mit doppelten Anführungszeichen
Einzeltextzeichen:
text-literal-characters:
      text-literal-character text-literal-charactersopt
text-literal-character:
      single-text-character
      character-escape-sequence
      double-quote-escape-sequence
single-text-character:

      Beliebiges Zeichen außer " (U+0022) oder # (U+0023), gefolgt von ( (U+0028)      Any character except " (U+0022) or # (U+0023) followed by ( (U+0028)
Escapesequenz mit doppelten Anführungszeichen:double-quote-escape-sequence:
      "" (U+0022, U+0022)      "" (U+0022, U+0022)

Im Folgenden finden Sie ein Beispiel für einen Textwert:The following is an example of a text value:

"ABC" // the text value ABC

Die folgenden Operatoren sind für Textwerte definiert:The following operators are defined on text values:

OperatorOperator ErgebnisResult
x = y GleichEqual
x <> y UngleichNot equal
x >= y Größer als oder gleichGreater than or equal
x > y Größer alsGreater than
x < y Kleiner alsLess than
x <= y Kleiner als oder gleichLess than or equal
x & y VerkettungConcatenation

Der native Typ von Textwerten ist der intrinsische Typ text.The native type of text values is the intrinsic type text.

BinärBinary

Binärwerte stellen eine Sequenz von Bytes dar.A binary value represents a sequence of bytes. Für diese Werte gibt es kein Literalformat.There is no literal format. Mehrere Standardbibliotheksfunktionen werden zum Erstellen von Binärwerten bereitgestellt.Several standard library functions are provided to construct binary values. Beispielsweise kann #binary zum Erstellen eines Binärwerts aus einer Liste von Bytes verwendet werden:For example, #binary can be used to construct a binary value from a list of bytes:

#binary( {0x00, 0x01, 0x02, 0x03} )

Die folgenden Operatoren sind für Binärwerte definiert:The following operators are defined on binary values:

OperatorOperator ErgebnisResult
x = y GleichEqual
x <> y UngleichNot equal
x >= y Größer als oder gleichGreater than or equal
x > y Größer alsGreater than
x < y Kleiner alsLess than
x <= y Kleiner als oder gleichLess than or equal

Der native Typ von Binärwerten ist der intrinsische Typ binary.The native type of binary values is the intrinsic type binary.

ListeList

Listenwerte sind Werte, die bei der Enumeration eine Sequenz von Werten erzeugt.A list value is a value which produces a sequence of values when enumerated. Ein Wert, der von einer Liste erzeugt wird, kann einen beliebigen Wert enthalten, einschließlich einer Liste.A value produced by a list can contain any kind of value, including a list. Listen können wie folgt mithilfe der Initialisierungssyntax erstellt werden:Lists can be constructed using the initialization syntax, as follows:

Listenausdruck:list-expression:
      {item-listopt }      { item-listopt }
Elementliste:
      Element
      Element
, Elementliste
Element:
      Ausdruck
      Ausdruck
.. Ausdruck
item-list:
      item
      item
, item-list
item:
      expression
      expression
.. expression

Im folgenden Beispiel für einen Listenausdruck wird eine Liste mit drei Textwerten definiert: "A", "B" und "C".The following is an example of a list-expression that defines a list with three text values: "A", "B", and "C".

{"A", "B", "C"}

Der Wert "A" ist das erste Element in der Liste, und der Wert "C" ist das letzte Element in der Liste.The value "A" is the first item in the list, and the value "C" is the last item in the list.

  • Die Elemente einer Liste werden erst ausgewertet, wenn auf sie zugegriffen wird.The items of a list are not evaluated until they are accessed.
  • Obwohl Listenwerte, die mithilfe der Listensyntax erstellt wurden, Elemente gemäß der Reihenfolge in der Elementliste erzeugen, können von Bibliotheksfunktionen zurückgegebene Listen im Allgemeinen bei jeder Enumeration eine andere Gruppe oder eine andere Anzahl von Werten erzeugen.While list values constructed using the list syntax will produce items in the order they appear in item-list, in general, lists returned from library functions may produce a different set or a different number of values each time they are enumerated.

Zum Einfügen einer Sequenz aus ganzen Zahlen in eine Liste kann das Format a..b verwendet werden:To include a sequence of whole number in a list, the a..b form can be used:

{ 1, 5..9, 11 }     // { 1, 5, 6, 7, 8, 9, 11 }

Die Anzahl der Elemente in einer Liste, die als Listenanzahl bezeichnet wird, kann mithilfe der Funktion List.Count ermittelt werden.The number of items in a list, known as the list count, can be determined using the List.Count function.

List.Count({true, false})  // 2 
List.Count({})             // 0

Eine Liste kann effektiv eine unbegrenzte Anzahl von Elementen enthalten. List.Count ist für solche Listen nicht definiert und kann entweder einen Fehler auslösen oder wird nicht beendet.A list may effectively have an infinite number of items; List.Count for such lists is undefined and may either raise an error or not terminate.

Wenn eine Liste keine Elemente beinhaltet, handelt es sich um eine leere Liste.If a list contains no items, it is called an empty list. Eine leere Liste wird folgendermaßen geschrieben:An empty list is written as:

{}  // empty list

Die folgenden Operatoren sind für Listen definiert:The following operators are defined for lists:

OperatorOperator ErgebnisResult
x = y GleichEqual
x <> y UngleichNot equal
x & y ConcatenateConcatenate

Beispiel:For example:

{1, 2} & {3, 4, 5}   // {1, 2, 3, 4, 5} 
{1, 2} = {1, 2}      // true 
{2, 1} <> {1, 2}     // true

Der native Typ von Listenwerten ist der intrinsische Typ list, der den Elementtyp any angibt.The native type of list values is the intrinsic type list, which specifies an item type of any.

Aufzeichnung (Record)Record

Datensatzwerte sind eine geordnete Sequenz von Feldern.A record value is an ordered sequence of fields. Ein Feld besteht aus einem Feldnamen, bei dem es sich um einen Textwert handelt, der das Feld im Datensatz eindeutig identifiziert, und einen Feldwert.A field consists of a field name, which is a text value that uniquely identifies the field within the record, and a field value. Der Feldwert kann einer beliebigen Art von Wert entsprechen, einschließlich Datensatzwerten.The field value can be any kind of value, including record. Datensätze können wie folgt mithilfe der Initialisierungssyntax erstellt werden:Records can be constructed using initialization syntax, as follows:

Datensatzausdruck:record-expression:
      [ Felderlisteopt ]      [ field-listopt ]
Felderliste:
      Feld
      Feld
, Felderliste
Feld:
      Feldname
= Ausdruck
Feldname:
      generalisierter Bezeichner
      Bezeichner in Anführungszeichen
field-list:
      field
      field
, field-list
field:
      field-name
= expression
field-name:
      generalized-identifier
      quoted-identifier

Im folgenden Beispiel wird ein Datensatz mit einem Feld namens x mit dem Wert 1 und einem Feld namens y mit dem Wert 2 erstellt.The following example constructs a record with a field named x with value 1, and a field named y with value 2.

[ x = 1, y = 2 ]

Im folgenden Beispiel wird ein Datensatz mit einem a-Feld namens „a“ mit einem geschachtelten Datensatzwert erstellt.The following example constructs a record with a field named a with a nested record value. Der geschachtelte Datensatz umfasst ein Feld namens b mit dem Wert 2.The nested record has a field named b with value 2.

[ a = [ b = 2 ] ]

Folgendes gilt beim Auswerten eines Datensatzausdrucks:The following holds when evaluating a record expression:

  • Der Ausdruck, der den einzelnen Feldnamen zugeordnet ist, wird zum Bestimmen des Werts des zugeordneten Felds verwendet.The expression assigned to each field name is used to determine the value of the associated field.

  • Wenn der Ausdruck, der einem Feldnamen zugewiesen ist, bei der Auswertung einen Wert erzeugt, wird dieser der Wert des Felds im resultierenden Datensatz.If the expression assigned to a field name produces a value when evaluated, then that becomes the value of the field of the resulting record.

  • Wenn der Ausdruck, der einem Feldnamen zugewiesen ist, bei der Auswertung einen Fehler auslöst, wird die Auslösung des Fehlers mit dem Feld und dem ausgelösten Fehlerwert aufgezeichnet.If the expression assigned to a field name raises an error when evaluated, then the fact that an error was raised is recorded with the field along with the error value that was raised. Anschließender Zugriff auf dieses Feld löst den Fehler nochmal mit dem aufgezeichneten Fehlerwert aus.Subsequent access to that field will cause an error to be re-raised with the recorded error value.

  • Der Ausdruck wird in einer Umgebung ähnlich der übergeordneten Umgebung ausgewertet, nur entsprechen die zusammengeführten Werte den Werten der Felder des Datensatzes, mit Ausnahme des Werts, der initialisiert wird.The expression is evaluated in an environment like the parent environment only with variables merged in that correspond to the value of every field of the record, except the one being initialized.

  • Ein Wert in einem Datensatz wird erst ausgewertet, wenn auf das entsprechende Feld zugegriffen wird.A value in a record is not evaluated until the corresponding field is accessed.

  • Ein Wert in einem Datensatz wird maximal einmal ausgewertet.A value in a record is evaluated at most once.

  • Das Ergebnis des Ausdrucks ist ein Datensatzwert mit einem leeren Metadatensatz.The result of the expression is a record value with an empty metadata record.

  • Die Reihenfolge der Felder im Datensatz wird anhand der Reihenfolge definiert, in der sie in record-initializer-expression angezeigt werden.The order of the fields within the record is defined by the order that they appear in the record-initializer-expression.

  • Jeder angegebene Feldname muss innerhalb des Datensatzes eindeutig sein, da sonst ein Fehler auftritt.Every field name that is specified must be unique within the record, or it is an error. Namen werden mit einem Ordinalvergleich verglichen.Names are compared using an ordinal comparison.

    [ x = 1, x = 2 ] // error: field names must be unique 
    [ X = 1, x = 2 ] // OK

Ein Datensatz ohne Felder wird als leerer Datensatz bezeichnet und wird wie folgt geschrieben:A record with no fields is called an empty record, and is written as follows:

[] // empty record

Obwohl die Reihenfolge der Felder eines Datensatzes für den Zugriff auf ein Feld oder das Vergleichen von zwei Datensätzen keine Bedeutung hat, ist sie in anderen Kontexten wichtig, z. B. wenn die Felder eines Datensatzes aufgelistet werden.Although the order of the fields of a record is not significant when accessing a field or comparing two records, it is significant in other contexts such as when the fields of a record are enumerated.

Die selben zwei Datensätze erzeugen unterschiedliche Ergebnisse, wenn die Felder abgerufen werden:The same two records produce different results when the fields are obtained:

Record.FieldNames([ x = 1, y = 2 ]) // [ "x", "y" ] 
Record.FieldNames([ y = 1, x = 2 ]) // [ "y", "x" ]

Die Anzahl der Felder in einem Datensatz kann mithilfe der Record.FieldCount-Funktion ermittelt werden.The number of fields in a record can be determined using the Record.FieldCount function. Beispiel:For example:

Record.FieldCount([ x = 1, y = 2 })  // 2 
Record.FieldCount([])                // 0

Neben der Verwendung der Datensatzinitialisierungssyntax [ ] können Datensätze auch aus einer Liste von Werten und einer Liste von Feldnamen oder einem Datensatztyp erstellt werden.In addition to using the record initialization syntax [ ], records can be constructed from a list of values, and a list of field names or a record type. Beispiel:For example:

Record.FromList({1, 2}, {"a", "b"})

Das obige Beispiel entspricht dem folgenden:The above is equivalent to:

[ a = 1, b = 2 ]

Die folgenden Operatoren sind für Datensatzwerte definiert:The following operators are defined for record values:

OperatorOperator ErgebnisResult
x = y GleichEqual
x <> y UngleichNot equal
x & y ZusammenführenMerge

In den folgenden Beispielen werden die oben genannten Operatoren veranschaulicht.The following examples illustrate the above operators. Beachten Sie, dass die Felder des rechten Operanden bei der Zusammenführung der Datensätze zum Überschreiben der Felder des linken Operanden verwendet werden, wenn eine Überlappung bei den Feldnamen vorliegt.Note that record merge uses the fields from the right operand to override fields from the left operand, should there be an overlap in field names.

[ a = 1, b = 2 ] & [ c = 3 ]    // [ a = 1, b = 2, c = 3 ] 
[ a = 1, b = 2 ] & [ a = 3 ]    // [ a = 3, b = 2 ] 
[ a = 1, b = 2 ] = [ b = 2, a = 1 ]         // true 
[ a = 1, b = 2, c = 3 ] <> [ a = 1, b = 2 ] // true

Der native Typ von Datensatzwerten ist der intrinsische Typ record, der eine offene leere Liste von Feldern angibt.The native type of record values is the intrinsic type record, which specifies an open empty list of fields.

TabelleTable

Ein Tabellenwert ist eine geordnete Sequenz von Zeilen.A table value is an ordered sequence of rows. Eine Zeile ist eine geordnete Sequenz von Werten.A row is an ordered sequence of value. Der Typ der Tabelle bestimmt die Länge aller Zeilen in der Tabelle, die Namen der Tabellenspalten, die Typen der Tabellenspalten und die Struktur der Tabellenschlüssel (sofern vorhanden).The table's type determines the length of all rows in the table, the names of the table's columns, the types of the table's columns, and the structure of the table's keys (if any).

Es gibt keine Literalsyntax für Tabellen.There is no literal syntax for tables. Mehrere Standardbibliotheksfunktionen werden zum Erstellen von Binärwerten bereitgestellt.Several standard library functions are provided to construct binary values. Beispielsweise kann #table zum Erstellen einer Tabelle aus einer Liste von Zeilenlisten und einer Liste von Headernamen verwendet werden:For example, #table can be used to construct a table from a list of row lists and a list of header names:

#table({"x", "x^2"}, {{1,1}, {2,4}, {3,9}})

Im obigen Beispiel wird eine Tabelle mit zwei Spalten erstellt, die beide den Typ type any aufweisen.The above example constructs a table with two columns, both of which are of type any.

#table kann auch zum Angeben eines vollständigen Tabellentyps verwendet werden:#table can also be used to specify a full table type:

#table(
    type table [Digit = number, Name = text],  
    {{1,"one"}, {2,"two"}, {3,"three"}} 
    )

Hier verfügt der neue Tabellenwert über einen Tabellentyp, der Spaltennamen und -typen angibt.Here the new table value has a table type that specifies column names and column types.

Die folgenden Operatoren sind für Tabellenwerte definiert:The following operators are defined for table values:

OperatorOperator ErgebnisResult
x = y GleichEqual
x <> y UngleichNot equal
x & y VerkettungConcatenation

Bei der Tabellenverkettung werden ähnlich benannte Spalten ausgerichtet, und der Wert null wird in Spalten eingefügt, die nur in einer der Operandentabellen vorhanden sind.Table concatenation aligns like-named columns and fills in null for columns appearing in only one of the operand tables. Im folgenden Beispiel wird die Tabellenverkettung veranschaulicht:The following example illustrates table concatenation:

  #table({"A","B"}, {{1,2}}) 
& #table({"B","C"}, {{3,4}})
AA BB CC
1 2 null
null 3 4

Der native Typ von Tabellenwerten ist ein benutzerdefinierter Tabellentyp (der vom intrinsischen Typ table abgeleitet wird), der die Spaltennamen auflistet, für alle Spaltentypen „any“ (beliebig) festlegt und über keine Schlüssel verfügt.The native type of table values is a custom table type (derived from the intrinsic type table) that lists the column names, specifies all column types to be any, and has no keys. (Ausführliche Informationen über Tabellentypen finden Sie unter Tabellentypen.)(See Table types for details on table types.)

FunktionFunction

Funktionswerte sind Werte, die einem einzelnen Wert mehrere Argumente zuordnen.A function value is a value that maps a set of arguments to a single value. Ausführliche Informationen über Funktionswerte finden Sie unter Funktionen.The details of function values are described in Functions.

TypType

Ein Typwert ist ein Wert, der andere Werte klassifiziert.A type value is a value that classifies other values. Ausführliche Informationen über Typwerte finden Sie unter Typen.The details of type values are described in Types.