ValoresValues

Um valor são dados produzidos pela avaliação de uma expressão.A value is data produced by evaluating an expression. Esta seção descreve os tipos de valores na linguagem M.This section describes the kinds of values in the M language. Cada tipo de valor é associado a uma sintaxe literal, um conjunto de valores que são desse tipo, um conjunto de operadores definidos sobre esse conjunto de valores e um tipo intrínseco atribuído a valores recém-criados.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.

TipoKind LiteralLiteral
NuloNull null
LógicoLogical true    false
NúmeroNumber 0    1    -1    1.5    2.3e-5
HoraTime #time(09,15,00)
DataDate #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)
TextoText "hello"
BinaryBinary #binary("AQID")
ListaList {1, 2, 3}
RegistroRecord [ A = 1, B = 2 ]
TabelaTable #table({"X","Y"},{{0,1},{1,0}})
FunçãoFunction (x) => x + 1
TipoType type { number }    type table [ A = any, B = text ]

As seções a seguir abordam cada tipo de valor em detalhes.The following sections cover each value kind in detail. Os tipos e a atribuição de tipo são definidos formalmente em Tipos.Types and type ascription are defined formally in Types. Os valores de função são definidos em Funções.Function values are defined in Functions. As seções a seguir listam os operadores definidos para cada tipo de valor e fornecem exemplos.The following sections list the operators defined for each value kind and give examples. A definição completa de semântica de operadores é fornecida a seguir, em Operadores.The full definition of operator semantics follows in Operators.

NuloNull

Um valor nulo é usado para representar a ausência de um valor ou um valor de um estado indeterminado ou desconhecido.A null value is used to represent the absence of a value, or a value of indeterminate or unknown state. Um valor nulo é gravado usando o literal null.A null value is written using the literal null. Os seguintes operadores são definidos para valores nulos:The following operators are defined for null values:

OperadorOperator ResultadoResult
x > y Maior queGreater than
x >= y Maior ou igualGreater than or equal
x < y Menor queLess than
x <= y Inferior ou igualLess than or equal
x = y IgualEqual
x <> y DiferenteNot equal

O tipo nativo do valor null é o tipo intrínseco null.The native type of the null value is the intrinsic type null.

LogicalLogical

Um valor lógico é usado para operações boolianas e tem o valor true ou false.A logical value is used for Boolean operations has the value true or false. Um valor lógico é escrito usando os literais true e false.A logical value is written using the literals true and false. Os seguintes operadores são definidos para valores lógicos:The following operators are defined for logical values:

OperadorOperator ResultadoResult
x > y Maior queGreater than
x >= y Maior ou igualGreater than or equal
x < y Menor queLess than
x <= y Inferior ou igualLess than or equal
x = y IgualEqual
x <> y DiferenteNot equal
x or y OR lógico condicionalConditional logical OR
x and y AND lógico condicionalConditional logical AND
not x NOT lógicoLogical NOT

O tipo nativo de ambos os valores lógicos (true e false) é o tipo intrínseco logical.The native type of both logical values (true and false) is the intrinsic type logical.

NúmeroNumber

Um valor de número é usado para operações numéricas e aritméticas.A number value is used for numeric and arithmetic operations. Estes são exemplos de literais de número: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)

Um número é representado com, no mínimo, a precisão de um Double (mas pode reter mais precisão).A number is represented with at least the precision of a Double (but may retain more precision). A representação de Double é congruente com o padrão de precisão dupla de 64 bits do IEEE para aritmética de ponto flutuante binário definido em [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]. (A representação de Double tem um intervalo dinâmico aproximado de 5,0 x 10324 para 1,7 x 10308 com uma precisão de 15-16 dígitos.)(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.)

Os seguintes valores especiais também são considerados valores do tipo number:The following special values are also considered to be number values:

  • Zero positivo e zero negativo.Positive zero and negative zero. Na maioria das situações, zero positivo e zero negativo se comportam de maneira idêntica ao valor zero simples, mas certas operações distinguem entre os dois.In most situations, positive zero and negative zero behave identically as the simple value zero, but certain operations distinguish between the two.

  • Infinito positivo (#infinity) e infinito negativo (-#infinity).Positive infinity (#infinity) and negative infinity (-#infinity). Os infinitos são produzidos por operações como a divisão de um número diferente de zero por zero.Infinities are produced by such operations as dividing a non-zero number by zero. Por exemplo, 1.0 / 0.0 produz infinito positivo e -1.0 / 0.0 produz infinito negativo.For example, 1.0 / 0.0 yields positive infinity, and -1.0 / 0.0 yields negative infinity.

  • O valor não é um número (#nan), geralmente abreviado como NaN.The Not-a-Number value (#nan), often abbreviated NaN. NaNs são produzidos por operações de ponto flutuante inválidas, como a divisão de zero por zero.NaNs are produced by invalid floating-point operations, such as dividing zero by zero.

As operações matemáticas binárias são executadas usando uma precisão.Binary mathematical operations are performed using a Precision. A precisão determina o domínio no qual os operandos são arredondados e o domínio no qual a operação é executada.The precision determines the domain to which the operands are rounded and the domain in which the operation is performed. Na ausência de uma precisão especificada explicitamente, essas operações são executadas usando precisão dupla.In the absence of an explicitly specified precision, such operations are performed using Double Precision.

  • Se o resultado de uma operação matemática for muito pequeno para o formato de destino, o resultado da operação se tornará zero positivo ou zero negativo.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.

  • Se o resultado de uma operação matemática for muito grande para o formato de destino, o resultado da operação se tornará infinito positivo ou infinito negativo.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.

  • Se uma operação matemática for inválida, o resultado da operação se tornará NaN.If a mathematical operation is invalid, the result of the operation becomes NaN.

  • Se um ou ambos os operandos de uma operação de ponto flutuante forem NaN, o resultado da operação se tornará NaN.If one or both operands of a floating-point operation is NaN, the result of the operation becomes NaN.

Os seguintes operadores são definidos para valores de número:The following operators are defined for number values:

OperadorOperator ResultadoResult
x > y Maior queGreater than
x >= y Maior ou igualGreater than or equal
x < y Menor queLess than
x <= y Inferior ou igualLess than or equal
x = y IgualEqual
x <> y DiferenteNot equal
x + y SomaSum
x - y DiferençaDifference
x * y ProdutoProduct
x / y QuocienteQuotient
+x Adição de unárioUnary plus
-x NegaçãoNegation

O tipo nativo de valores de número é o tipo intrínseco number.The native type of number values is the intrinsic type number.

HoraTime

Um valor temporal armazena uma representação opaca de hora do dia.A time value stores an opaque representation of time of day. Uma hora é codificada como o número de tiques desde a meia-noite, que conta o número de tiques de 100 nanossegundos decorridos em um relógio de 24 horas.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. O número máximo de tiques desde a meia-noite corresponde a 23:59:59,9999999 horas.The maximum number of ticks since midnight corresponds to 23:59:59.9999999 hours.

Os valores temporais podem ser construídos usando o tipo intrínseco #time.Time values may be constructed using the #time instrinsic.

#time(hour, minute, second)

As seguintes condições precisarão ser compridas ou um erro com o código de motivo Expression.Error será gerado:The following must hold or an error with reason code Expression.Error is raised:

0 ≤ hora ≤ 240 ≤ hour ≤ 24
0 ≤ minuto ≤ 590 ≤ minute ≤ 59
0 ≤ segundo ≤ 590 ≤ second ≤ 59

Além disso, se hora = 24, então minuto e segundo precisam ser zero.In addition, if hour = 24, then minute and second must be zero.

Os seguintes operadores são definidos para valores de tempo:The following operators are defined for time values:

OperadorOperator ResultadoResult
x = y IgualEqual
x <> y DiferenteNot equal
x >= y Maior ou igualGreater than or equal
x > y Maior queGreater than
x < y Menor queLess than
x <= y Inferior ou igualLess than or equal

Os seguintes operadores permitem que um ou ambos os operandos sejam uma data:The following operators permit one or both of their operands to be a date:

OperadorOperator Operando EsquerdoLeft Operand Operando DireitoRight Operand SignificadoMeaning
x + y time duration Deslocamento de Date por duraçãoDate offset by duration
x + y duration time Deslocamento de Date por duraçãoDate offset by duration
x - y time duration Deslocamento de data por duração negadaDate offset by negated duration
x - y time time Duração entre datasDuration between dates
x & y date time Data/hora mescladasMerged datetime

O tipo nativo de valores de tempo é o tipo intrínseco time.The native type of time values is the intrinsic type time.

DataDate

Um valor de data armazena uma representação opaca de um dia específico.A date value stores an opaque representation of a specific day. Uma data é codificada como um número de dias desde a época, a partir de 1º de janeiro de 0001 da Era Comum no calendário gregoriano.A date is encoded as a number of days since epoch, starting from January 1, 0001 Common Era on the Gregorian calendar. O número máximo de dias desde a época é de 3652058, correspondendo a 31 de dezembro de 9999.The maximum number of days since epoch is 3652058, corresponding to December 31, 9999.

Os valores de data podem ser construídos usando o tipo intrínseco #date.Date values may be constructed using the #date intrinsic.

#date(year, month, day)

As seguintes condições precisarão ser compridas ou um erro com o código de motivo Expression.Error será gerado:The following must hold or an error with reason code Expression.Error is raised:

1 ≤ ano ≤ 99991 ≤ year ≤ 9999
1 ≤ mês ≤ 121 ≤ month ≤ 12
1 ≤ dia ≤ 311 ≤ day ≤ 31

Além disso, o dia deve ser válido para o mês e o ano escolhidos.In addition, the day must be valid for the chosen month and year.

Os seguintes operadores são definidos para valores de data:The following operators are defined for date values:

OperadorOperator ResultadoResult
x = y IgualEqual
x <> y DiferenteNot equal
x >= y Maior ou igualGreater than or equal
x > y Maior queGreater than
x < y Menor queLess than
x <= y Inferior ou igualLess than or equal

Os seguintes operadores permitem que um ou ambos os operandos sejam uma data:The following operators permit one or both of their operands to be a date:

OperadorOperator Operando EsquerdoLeft Operand Operando DireitoRight Operand SignificadoMeaning
x + y date duration Deslocamento de Date por duraçãoDate offset by duration
x + y duration date Deslocamento de Date por duraçãoDate offset by duration
x - y date duration Deslocamento de data por duração negadaDate offset by negated duration
x - y date date Duração entre datasDuration between dates
x & y date time Data/hora mescladasMerged datetime

O tipo nativo de valores de data é o tipo intrínseco date.The native type of date values is the intrinsic type date.

DateTimeDateTime

Um valor datetime contém uma data e uma hora.A datetime value contains both a date and time.

Os valores datetime podem ser construídos usando o tipo intrínseco #datetime.DateTime values may be constructed using the #datetime intrinsic.

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

As seguintes condições precisarão ser compridas ou um erro com o código de motivo Expression.Error será gerado: 1 ≤ ano ≤ 9999The following must hold or an error with reason code Expression.Error is raised: 1 ≤ year ≤ 9999
1 ≤ mês ≤ 121 ≤ month ≤ 12
1 ≤ dia ≤ 311 ≤ day ≤ 31
0 ≤ hora ≤ 230 ≤ hour ≤ 23
0 ≤ minuto ≤ 590 ≤ minute ≤ 59
0 ≤ segundo ≤ 590 ≤ second ≤ 59

Além disso, o dia deve ser válido para o mês e o ano escolhidos.In addition, the day must be valid for the chosen month and year.

Os seguintes operadores são definidos para valores datetime:The following operators are defined for datetime values:

OperadorOperator ResultadoResult
x = y IgualEqual
x <> y DiferenteNot equal
x >= y Maior ou igualGreater than or equal
x > y Maior queGreater than
x < y Menor queLess than
x <= y Inferior ou igualLess than or equal

Os seguintes operadores permitem que um ou ambos os operandos sejam um datetime:The following operators permit one or both of their operands to be a datetime:

OperadorOperator Operando EsquerdoLeft Operand Operando DireitoRight Operand SignificadoMeaning
x + y datetime duration Deslocamento de data/hora por duraçãoDatetime offset by duration
x + y duration datetime Deslocamento de data/hora por duraçãoDatetime offset by duration
x - y datetime duration Deslocamento de Datetime por duração negadaDatetime offset by negated duration
x - y datetime datetime Duração entre datetimesDuration between datetimes

O tipo nativo de valores datetime é o tipo intrínseco datetime.The native type of datetime values is the intrinsic type datetime.

DateTimeZoneDateTimeZone

Um valor de datetimezone contém um datetime e um timezone.A datetimezone value contains a datetime and a timezone. Um timezone é codificado como um número de minutos de diferença UTC, que conta o número de minutos que datetime deverá ter de diferença em relação ao UTC (horário coordenado universal).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). O número mínimo de minutos de diferença UTC é -840, representando uma diferença UTC de -14:00 ou quatorze horas antes do UTC.The minimum number of minutes offset from UTC is -840, representing a UTC offset of -14:00, or fourteen hours earlier than UTC. O número máximo de minutos de diferença UTC é 840, correspondendo a uma diferença UTC de 14:00.The maximum number of minutes offset from UTC is 840, corresponding to a UTC offset of 14:00.

Os valores datetimezone podem ser construídos usando o tipo intrínseco #datetimezone.DateTimeZone values may be constructed using the #datetimezone intrinsic.

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

As seguintes condições precisarão ser compridas ou um erro com o código de motivo Expression.Error será gerado:The following must hold or an error with reason code Expression.Error is raised:

1 ≤ ano ≤ 99991 ≤ year ≤ 9999
1 ≤ mês ≤ 121 ≤ month ≤ 12
1 ≤ dia ≤ 311 ≤ day ≤ 31
0 ≤ hora ≤ 230 ≤ hour ≤ 23
0 ≤ minuto ≤ 590 ≤ minute ≤ 59
0 ≤ segundo ≤ 590 ≤ second ≤ 59
-14 ≤ horas de diferença ≤ 14-14 ≤ offset-hours ≤ 14
-59 ≤ minutos de diferença ≤ 59-59 ≤ offset-minutes ≤ 59

Além disso, o dia precisa ser válido para o mês e o ano escolhidos e, se horas-de-diferença = 14, então minutos-de-diferença < = 0 e, se horas-de-diferença =-14, então minutos-de-diferença > = 0.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.

Os seguintes operadores são definidos para valores datetimezone:The following operators are defined for datetimezone values:

OperadorOperator ResultadoResult
x = y IgualEqual
x <> y DiferenteNot equal
x >= y Maior ou igualGreater than or equal
x > y Maior queGreater than
x < y Menor queLess than
x <= y Inferior ou igualLess than or equal

Os seguintes operadores permitem que um ou ambos os operandos sejam um datetimezone:The following operators permit one or both of their operands to be a datetimezone:

OperadorOperator Operando EsquerdoLeft Operand Operando DireitoRight Operand SignificadoMeaning
x + y datetimezone duration Deslocamento DateTimeZone por duraçãoDatetimezone offset by duration
x + y duration datetimezone Deslocamento DateTimeZone por duraçãoDatetimezone offset by duration
x - y datetimezone duration Deslocamento de datetimezone por duração negadaDatetimezone offset by negated duration
x - y datetimezone datetimezone Duração entre datetimezonesDuration between datetimezones

O tipo nativo de valores datetimezone é o tipo intrínseco datetimezone.The native type of datetimezone values is the intrinsic type datetimezone.

DuraçãoDuration

Um valor de duração armazena uma representação opaca da distância entre dois pontos em uma linha do tempo medida em tiques de 100 nanossegundos.A duration value stores an opaque representation of the distance between two points on a timeline measured 100-nanosecond ticks. A magnitude de uma duração pode ser positiva ou negativa, em que valores positivos indicam avanço no tempo e valores negativos indicam retrocesso no tempo.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. O valor mínimo que pode ser armazenado em uma duração é de -9.223.372.036.854.775.808 tiques ou 10.675.199 dias, 2 horas, 48 minutos e 5,4775808 segundos recuando no tempo.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. O valor máximo que pode ser armazenado em uma duração é de -9.223.372.036.854.775.807 tiques ou 10.675.199 dias, 2 horas, 48 minutos e 5,4775807 segundos avançando no tempo.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.

Os valores de duração podem ser construídos usando a função intrínseca #duration: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

Os seguintes operadores são definidos em valores de duração:The following operators are defined on duration values:

OperadorOperator ResultadoResult
x = y IgualEqual
x <> y DiferenteNot equal
x >= y Maior ou igualGreater than or equal
x > y Maior queGreater than
x < y Menor queLess than
x <= y Inferior ou igualLess than or equal

Além disso, os seguintes operadores permitem que um ou ambos os operandos sejam um valor de duração:Additionally, the following operators allow one or both of their operands to be a duration value:

OperadorOperator Operando EsquerdoLeft Operand Operando DireitoRight Operand SignificadoMeaning
x + y datetime duration Deslocamento de data/hora por duraçãoDatetime offset by duration
x + y duration datetime Deslocamento de data/hora por duraçãoDatetime offset by duration
x + y duration duration Soma das duraçõesSum of durations
x - y datetime duration Deslocamento de Datetime por duração negadaDatetime offset by negated duration
x - y datetime datetime Duração entre datetimesDuration between datetimes
x - y duration duration Diferença de duraçõesDifference of durations
x * y duration number N vezes uma duraçãoN times a duration
x * y number duration N vezes uma duraçãoN times a duration
x / y duration number Fração de uma duraçãoFraction of a duration

O tipo nativo de valores de duração é o tipo intrínseco duration.The native type of duration values is the intrinsic type duration.

TextoText

Um valor de texto representa uma sequência de caracteres Unicode.A text value represents a sequence of Unicode characters. Os valores de texto têm um formato literal em conformidade com a seguinte gramática:Text values have a literal form conformant to the following grammar:

_literal-de-texto:_text-literal:
      " caracteres-de-literal-de-textoopt "      " text-literal-charactersopt "
caracteres-de-literal-de-texto:
      caractere-de-literal-de-texto caracteres-de-literal-de-textoopt
caractere-de-literal-de-texto:
      caractere-de-texto-único
      sequência-de-escape-de-caracteres
      sequência-de-escape-com-aspas-duplas
caractere-de-texto-único:
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:

      Qualquer caractere, exceto " (U+0022) ou # (U+0023) seguido por ( (U+0028)      Any character except " (U+0022) or # (U+0023) followed by ( (U+0028)
sequência-de-escape-com-aspas-duplas:double-quote-escape-sequence:
      "" (U+0022, U+0022)      "" (U+0022, U+0022)

Segue um exemplo de um valor de texto:The following is an example of a text value:

"ABC" // the text value ABC

Os seguintes operadores são definidos em valores de texto:The following operators are defined on text values:

OperadorOperator ResultadoResult
x = y IgualEqual
x <> y DiferenteNot equal
x >= y Maior ou igualGreater than or equal
x > y Maior queGreater than
x < y Menor queLess than
x <= y Inferior ou igualLess than or equal
x & y ConcatenaçãoConcatenation

O tipo nativo de valores de texto é o tipo intrínseco text.The native type of text values is the intrinsic type text.

BinárioBinary

Um valor binário representa uma sequência de bytes.A binary value represents a sequence of bytes. Não há nenhum formato literal.There is no literal format. Várias funções de biblioteca padrão são fornecidas para construir valores binários.Several standard library functions are provided to construct binary values. Por exemplo, #binary pode ser usado para construir um valor binário com base em uma lista de bytes:For example, #binary can be used to construct a binary value from a list of bytes:

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

Os seguintes operadores são definidos em valores binários:The following operators are defined on binary values:

OperadorOperator ResultadoResult
x = y IgualEqual
x <> y DiferenteNot equal
x >= y Maior ou igualGreater than or equal
x > y Maior queGreater than
x < y Menor queLess than
x <= y Inferior ou igualLess than or equal

O tipo nativo de valores binários é o tipo intrínseco binary.The native type of binary values is the intrinsic type binary.

ListaList

Um valor de lista é um valor que produz uma sequência de valores quando enumerado.A list value is a value which produces a sequence of values when enumerated. Um valor produzido por uma lista pode conter qualquer tipo de valor, incluindo uma lista.A value produced by a list can contain any kind of value, including a list. As listas podem ser construídas usando a sintaxe de inicialização, da seguinte maneira:Lists can be constructed using the initialization syntax, as follows:

expressão-de-lista:list-expression:
      { lista-de-itensopt }      { item-listopt }
lista-de-itens:
      item
      item
, lista-de-itens
item:
      expressão
      expressão
.. expressão
item-list:
      item
      item
, item-list
item:
      expression
      expression
.. expression

Veja o seguinte exemplo, que mostra uma expressão-de-lista que define uma lista com três valores de texto: "A", "B" e "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"}

O valor "A" é o primeiro item na lista e o valor "C" é o último item da lista.The value "A" is the first item in the list, and the value "C" is the last item in the list.

  • Os itens de uma lista não são avaliados até que sejam acessados.The items of a list are not evaluated until they are accessed.
  • Embora os valores de lista construídos usando a sintaxe de lista produzam itens na ordem em que eles aparecem na lista-de-itens, em geral, as listas retornadas de funções de biblioteca podem produzir um conjunto diferente ou um número diferente de valores sempre que são enumeradas.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.

Para incluir uma sequência de números inteiros em uma lista, o formato a..b pode ser usado: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 }

O número de itens em uma lista, conhecido como a contagem da lista, pode ser determinado usando a função List.Count.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

Uma lista pode ter efetivamente um número infinito de itens; a List.Count para essas listas é indefinida e pode gerar um erro ou não ter fim.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.

Se uma lista não contiver nenhum item, ela será chamada de lista vazia.If a list contains no items, it is called an empty list. Uma lista vazia é escrita como:An empty list is written as:

{}  // empty list

Os seguintes operadores são definidos para listas:The following operators are defined for lists:

OperadorOperator ResultadoResult
x = y IgualEqual
x <> y DiferenteNot equal
x & y ConcatenateConcatenate

Por exemplo:For example:

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

O tipo nativo de valores de lista é o tipo intrínseco list, que especifica um tipo de item de any.The native type of list values is the intrinsic type list, which specifies an item type of any.

RecordRecord

Um valor de registro é uma sequência ordenada de campos.A record value is an ordered sequence of fields. Um campo consiste em um nome do campo (um valor de texto que identifica o campo de maneira exclusiva dentro do registro) e em um valor do campo.A field consists of a field name, which is a text value that uniquely identifies the field within the record, and a field value. O valor do campo pode ser qualquer tipo de valor, incluindo um registro.The field value can be any kind of value, including record. Registros podem ser construídos usando sintaxe de inicialização, da seguinte maneira:Records can be constructed using initialization syntax, as follows:

expressão-de-registro:record-expression:
      [ lista-de-camposopt ]      [ field-listopt ]
lista-de-campos:
      campo
      campo
, lista-de-campos
campo:
      nome-do-campo
= expressão
nome-do-campo:
      identificador-generalizado
      identificador-entre-aspas
field-list:
      field
      field
, field-list
field:
      field-name
= expression
field-name:
      generalized-identifier
      quoted-identifier

O exemplo a seguir constrói um registro com um campo chamado x com o valor 1 e um campo chamado y com o valor 2.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 ]

O exemplo a seguir constrói um registro com um campo a chamado a com um valor de registro aninhado.The following example constructs a record with a field named a with a nested record value. O registro aninhado tem um campo chamado b com o valor 2.The nested record has a field named b with value 2.

[ a = [ b = 2 ] ]

Os seguintes preceitos são válidos ao avaliar uma expressão de registro:The following holds when evaluating a record expression:

  • A expressão atribuída a cada nome de campo é usada para determinar o valor do campo associado.The expression assigned to each field name is used to determine the value of the associated field.

  • Se a expressão atribuída a um nome de campo produzir um valor quando avaliada, esse se tornará o valor do campo do registro resultante.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.

  • Se a expressão atribuída a um nome de campo gerar um erro quando for avaliada, o fato de um erro ter sido gerado será registrado com o campo junto com o valor de erro que tiver sido gerado.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. O acesso subsequente a esse campo fará com que um erro seja recriado com o valor de erro registrado.Subsequent access to that field will cause an error to be re-raised with the recorded error value.

  • A expressão é avaliada em um ambiente como o ambiente pai somente com variáveis mescladas, no sentido de que correspondem ao valor de todos os campos do registro, exceto por aquele que está sendo inicializado.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.

  • Um valor em um registro não é avaliado até que o campo correspondente seja acessado.A value in a record is not evaluated until the corresponding field is accessed.

  • Um valor em um registro é avaliado no máximo uma vez.A value in a record is evaluated at most once.

  • O resultado da expressão é um valor de registro com um registro de metadados vazio.The result of the expression is a record value with an empty metadata record.

  • A ordem dos campos dentro do registro é definida pela ordem em que eles aparecem na expressão-inicializadora-do-registro.The order of the fields within the record is defined by the order that they appear in the record-initializer-expression.

  • Cada nome de campo especificado precisa ser exclusivo dentro do registro, caso contrário resulta em um erro.Every field name that is specified must be unique within the record, or it is an error. Os nomes são comparados pelo uso de uma comparação ordinal.Names are compared using an ordinal comparison.

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

Um registro sem campos é chamado de registro vazio e é escrito da seguinte maneira:A record with no fields is called an empty record, and is written as follows:

[] // empty record

Embora a ordem dos campos de um registro não seja significativa ao acessar um campo ou comparar dois registros, ela é significativa em outros contextos, como quando os campos de um registro são enumerados.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.

Os mesmos dois registros produzem resultados diferentes quando os campos são obtidos: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" ]

O número de campos em um registro pode ser determinado usando a função Record.FieldCount.The number of fields in a record can be determined using the Record.FieldCount function. Por exemplo:For example:

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

Além de usar a sintaxe de inicialização de registro [ ], os registros podem ser construídos com base em uma lista de valores e uma lista de nomes de campo ou um tipo de registro.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. Por exemplo:For example:

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

O exemplo acima é equivalente a:The above is equivalent to:

[ a = 1, b = 2 ]

Os seguintes operadores são definidos para valores de registro:The following operators are defined for record values:

OperadorOperator ResultadoResult
x = y IgualEqual
x <> y DiferenteNot equal
x & y MesclarMerge

Os exemplos a seguir ilustram o uso dos operadores acima.The following examples illustrate the above operators. Observe que a mesclagem de registros usa os campos do operando direito para substituir campos do operando esquerdo, caso haja uma sobreposição em nomes de campo.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

O tipo nativo de valores de registro é o tipo intrínseco record, que especifica uma lista de campos vazia aberta.The native type of record values is the intrinsic type record, which specifies an open empty list of fields.

TabelaTable

Um valor de tabela é uma sequência ordenada de linhas.A table value is an ordered sequence of rows. Uma linha é uma sequência ordenada de valores.A row is an ordered sequence of value. O tipo da tabela determina o comprimento de todas as linhas na tabela, os nomes das colunas da tabela, os tipos das colunas da tabela e a estrutura das chaves da tabela (se houver).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).

Não há sintaxe literal para tabelas.There is no literal syntax for tables. Várias funções de biblioteca padrão são fornecidas para construir valores binários.Several standard library functions are provided to construct binary values. Por exemplo, #table pode ser usado para construir uma tabela com base em uma lista de listas de linhas e uma lista de nomes de cabeçalho: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}})

O exemplo acima constrói uma tabela com duas colunas, sendo que as duas são do type any.The above example constructs a table with two columns, both of which are of type any.

#table também pode ser usado para especificar um tipo de tabela completa:#table can also be used to specify a full table type:

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

Aqui, o novo valor de tabela tem um tipo de tabela que especifica os nomes de coluna e os tipos de coluna.Here the new table value has a table type that specifies column names and column types.

Os seguintes operadores são definidos para valores de tabela:The following operators are defined for table values:

OperadorOperator ResultadoResult
x = y IgualEqual
x <> y DiferenteNot equal
x & y ConcatenaçãoConcatenation

A concatenação de tabelas alinha colunas com nomes semelhantes e preenche null para colunas que aparecem em apenas uma das tabelas de operandos.Table concatenation aligns like-named columns and fills in null for columns appearing in only one of the operand tables. Este exemplo ilustra a concatenação de tabelas: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

O tipo nativo de valores de tabela é um tipo de tabela personalizado (derivado do tipo intrínseco table) que lista os nomes de coluna, especifica todos os tipos de coluna como any e não tem nenhuma chave.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. (Confira Tipos de tabela para obter detalhes sobre os tipos de tabela.)(See Table types for details on table types.)

FunçãoFunction

Um valor de função é um valor que mapeia um conjunto de argumentos para apenas um valor.A function value is a value that maps a set of arguments to a single value. Os detalhes dos valores de função são descritos em Funções.The details of function values are described in Functions.

TipoType

Um valor de tipo é um valor que classifica outros valores.A type value is a value that classifies other values. Os detalhes dos valores de tipo são descritos em Tipos.The details of type values are described in Types.