Usando VECTORs em ObjectScript
A maioria dos exemplos que eu vi até agora no OEX (OpenExchange) ou na DC (Developer Community) deixam a impressão de que os VECTORs são apenas algo disponível com SQL com as 3 funções, especialmente em torno de VECTOR_Search.
* TO_VECTOR()
* VECTOR_DOT_PRODUCT ()
* VECTOR_COSINE ()
Há um sumário muito útil escondido no pacote demo iris-vector-search.
Lá você pode encontrar tudo o que precisa em diversos links e cantos.
Eu sentia falta de mais métodos com VECTOR e coloquei uma ideia relacionada a isso no Ideas Portal
Em seguida, me lembrei que todo método SQL ou procedure reside em uma série de códigos ObjectScript.
Então fui pesquisar por isso e esse é o resumo da minha pesquisa.
%Library.Vector é a descrição essencial do novo DataType (tipo de dado)
É uma estrutura complexa como objetos ou %DynamicObjects ou expressões $Bit que requerem métodos específicos de acesso.
Também vemos 2 parâmetros requeridos:
* DATATTYPE - uma vez setado, não pode ser modificado.
Tipos aceitos: "integer" (ou "int"), "double", "decimal", "string", e "timestamp".
* LEN > 0, pode crescer, mas nunca diminuir.
$vector() / &ve() é o método básico para acesso ao VECTOR.
* Atribuir Dados do Vetor >>> SET $VE(. . .) = val
* Retornar Dados do Vetor >>> WRITE $VE(. . .) , SET var=$VE(. . .)
DICA: uma posição sozinha retorna o valor, mas uma posição de::para retorna outro vetor!
* Deletar Dados do Vetor >>> KILL $VE(. . .)
Todos os 3 requerem pelo menos um parâmetro de posição. Você pode entender isso como dimensões.
$isvector() é obviamente a checagem para o formato correto antes de realizar operações.
$vectorop() / $vop() cobtem todas as outras funções relacionadas aos vetores.
Os parâmetros de chamada geralmente são (operação, vetor)
Algumas operações oferecem um bitexpr opcional. Ele marca posições/dimensões para serem ex-/in-clusas.
Exemplo:
- Pense em um vetor 3D. Você só quer operar nos eixos x e y, não em z.
Operações de vetor único
Operações de agregar
* "count"
* "max"
* "min"
* "sum"
Operações de filtro
* "defined"
* "undefined"
* "<"
* "<="
* ">"
* ">="
* "="
* "!="
* "between"
Operações numéricas
* "+"
* "-"
* "/"
* "*"
* "**"
* "#"
* "e-"
* "e/"
* "ceiling"
* "floor"
Operações de String
* "_"
* "e_"
* "lower"
* "upper"
* "substring"
* "trim"
* "triml"
* "trimr"
Operações de agrupamento
* "group"
* "countgb"
Operações diversas
* "convert"
* "length"
* "mask"
* "positions"
* "set"
Operações informativas
* "bytesize"
* "type"
Operações Multi Vetor (geralmente 2 vetores)
Operações de filtro vetoriais
* "v<"
* "v<="
* "v>"
* "v>="
* "v="
* "v!="
Operações aritméticas vetoriais
* "v+"
* "v-"
* "v/"
* "v*"
* "v**"
* "v#"
Concatenação de vetores
* "v_"
Agrupamento de vetores
* "countg"
* "maxg"
* "ming"
* "sumg"
Mesclagem de vetores
* "vset"
Você pode ver que há um rico conjunto de ferramentas já disponível.
Se você estudar as documentações em detalhes, o propósito ou vantagem dos resultados pode não parecer evidente imediatamente.
Ainda assim, espero que você tenha conseguido uma visão geral do que j[a está disponível.
Comments
Muito obrigado pela tradução !
🌼🥇