Entonces, esta demostración analizará algunas de las características básicas de listas y matrices. Así que voy a empezar con las listas. Y voy a obtener una nueva ventana del editor de secuencias de comandos. De nuevo, el método abreviado de teclado es Ctrl+T. Y cambiaré el tamaño y reorganizaré eso. Déjame seguir adelante y traer el registro frente al diario. Y voy a crear una variable que llamaré mi lista. Y le asignaré los resultados de la función de lista. Así que la lista de palabras abre paréntesis y voy a usar las variables a, b. Y luego voy a calcular la raíz cuadrada de Eso es sqrt y luego entre paréntesis. Y seguiré adelante y formatearé solo para obtener las mayúsculas y el espaciado allí. Y ejecutaré el script. Entonces, lo que aparece en el registro es simplemente la información de que se ha asignado una lista con tres elementos. Si paso el cursor sobre mi lista, lo que vemos es que está almacenando los elementos que ingresé sin evaluar. Así que son las dos variables y la función raíz cuadrada. En una nueva línea en la ventana de mi editor de secuencias de comandos, voy a solicitar una evaluación de los elementos de mi lista. Así que escribiré eval list entre paréntesis abiertos en mi lista. Y correré solo esa línea. Y ahí veo los resultados evaluados. Ahora, mi lista permanece sin evaluar. Entonces, si quisiera trabajar con los resultados de la lista de evaluación, una cosa sería asignar el resultado de evaluar la lista a una nueva lista. Sin embargo, hay otras formas en que podemos usar subíndices para trabajar con elementos evaluados de la lista. Entonces, antes de hablar de eso, permítanme hablar sobre subíndices de la lista en general. Así que voy a ir a una nueva línea. Y voy a escribir mi lista entre corchetes abiertos. Y escribiré a para extraer el segundo elemento de la lista. Y si ejecuto solo esa línea, lo que veo es el elemento no evaluado. ¿Y qué si quería el resultado evaluado? Bueno, en realidad puedo volver a mi segunda línea aquí. Puedo solicitar una evaluación de mi lista y luego suscribir ese resultado. Así que pondré un corchete abierto, una allí, cerraré el corchete. Y ejecutaré solo esa línea nuevamente, usando la tecla Intro en el teclado numérico en el extremo derecho del teclado de mi computadora de escritorio. Así que allí, acabo de suscribir la lista evaluada para recuperar ese resultado. Hablamos de modificar listas. Así que quiero ir a una nueva línea. Y voy a usar insertar en. Así que insertar en modificará la lista en su lugar. Así que abriré paréntesis. ¿Y qué lista estoy modificando? Bueno, está guardado en mi lista. Ese es el primer argumento. ¿Qué quiero agregar? Añadiré el nombre John. Así que eso es una cadena de caracteres. Y si no pongo esa coma ahí y no proporciono el tercer argumento, simplemente lo pone al final de la lista. Pero voy a tener la coma, y voy a escribir a como tercer argumento opcional para ponerlo en la segunda posición. Y luego, ejecutaré solo esa línea. E insertar en en realidad no devuelve nada al registro. Pero si paso el cursor sobre mi lista en cualquier lugar que aparezca en el script, puede ver que se modificó para tener el nombre John en la segunda posición. Ahora, supongamos que tengo una lista, tal vez me la haya devuelto una función JSL o se haya utilizado para recopilar información del usuario, por ejemplo. Y necesito encontrar un elemento en la lista para poder eliminarlo. Sé que es... bueno, no sé si está en la lista. Primero quiero consultar si está en la lista. Y luego, si es así, quiero poder eliminarlo. Así que voy a crear una variable para almacenar la posición del elemento John. Llamaré a esa pos. Y asignaré que el resultado de la función contiene. Y así hemos visto contiene con cadenas de caracteres. Ahora contiene con una lista. Estamos buscando en mi lista la cadena de caracteres John, y distinguirá entre mayúsculas y minúsculas, por supuesto. Y si ejecuto esa línea, el resultado que se devuelve y se almacena en la variable pos es Y entonces, si quisiera eliminar eso de la lista, por ejemplo, podría continuar y escribir eliminar entre paréntesis abiertos. Estamos buscando en mi lista. Y quiero, en lugar de simplemente eliminar el último elemento, que es lo que obtendría si no proporcionara nada después del primer argumento, voy a usar la variable pos. Y corro esa línea. Y eso devuelve una lista con cualquier número de elementos eliminados. Por defecto tomamos uno comenzando desde la posición especificada en el segundo argumento. Entonces obtengo una lista que tiene esa cadena de caracteres. Y en realidad podría asignar ese resultado a su propia variable si quisiera usar ese elemento de la lista en otra parte de mi script. Y también podría extraerlo de la lista en la que se devuelve subíndice esto con un Así que déjame, ahora mismo, mi lista ya no contiene a John. Voy a ejecutar mi línea de nuevo. El valor almacenado en pos seguirá siendo el mismo. Y voy a ejecutar la línea Y para que devuelva la cadena de caracteres que no está en la lista. Y si paso el cursor sobre mi lista, podemos ver que ha vuelto a su valor anterior. Hablemos un poco de matrices. Voy a hacer clic con el botón derecho en el registro para borrarlo y luego seleccionaré todo en la ventana del Editor de secuencias de comandos y lo eliminaré. Así que voy a empezar simulando personas, que serán mis filas en mi matriz. Y cada una de esas personas lanzará un dado cinco veces, un dado de seis caras. Y esas serán mis columnas. Y voy a generarlos con un generador de números aleatorios, pero voy a comenzar con un valor inicial específico para que, si sigues, obtengas exactamente los mismos números aleatorios. Y vamos a usar una función llamada función j, que crea una matriz con un número específico de filas y columnas. Esos son sus dos primeros argumentos y luego cuál será el valor en la matriz, ese es el tercer argumento. Así que voy a usar la función de reinicio aleatorio con un valor de Y, nuevamente, esto solo especifica mi semilla inicial para el generador de números aleatorios. Así que seguiré adelante y ejecutaré eso. Y luego, en una nueva línea, crearé una variable m, a la que se le asignará el resultado de la función j. De nuevo, empiezo con el número de filas en las que simulamos personas y luego el número de columnas, lanzando un dado de seis caras cinco veces. Y usaré la función de números enteros aleatorios con los argumentos: comenzaremos en y seleccionaremos números aleatorios hasta Y, de nuevo, puedo reformatear esto solo para que se vea un poco... Vaya, lo ejecuté en lugar de reformatear eso. Todavía puedo formatearlo. Aquí vamos. Así que también se ejecuta ahora. Y si hacemos el registro un poco más grande, allí pueden ver que tengo esa matriz fila por columna. ¿Y cómo me refiero a los elementos de esa matriz? Bueno, usamos subíndices. Así que voy a ir a una nueva línea. Tal vez me interese saber qué sacó la quinta persona en su tercer lanzamiento del dado. Así que voy a subíndice el nombre de la variable m, luego m y luego corchetes. para el número de fila, coma, para el número de columna, cierre el corchete y ejecute esa línea. Y así, la quinta persona en su tercera tirada sacó un Y podemos verificar eso. Así que hay uno, dos, tres, cuatro, está la quinta fila y está el tercer lanzamiento del dado. Ahora, ¿qué pasa si quiero encontrar una fila completa o una columna completa? Bueno, en una nueva línea aquí, de hecho, usaré la misma línea y simplemente reemplazaré el subíndice en mi línea. Digamos que quiero toda la fila. Así que escribo para el primer subíndice. Y luego, después de la coma, escribiré para indicar que no quiero que seleccione ninguna columna en particular. Esta va a ser la fila de cada columna. Y puedo ejecutar eso. Y eso me da fila todos los valores. Y podríamos, si desea desplazarse hacia arriba, verificar que esos son de hecho los valores en la fila. Así que eso es, de hecho, lo que devolvemos. Podría hacer lo mismo para seleccionar una columna donde solo tendría un para el subíndice de la fila y luego cualquier número de columna. Pero supongamos que quiero deshacerme de una fila entera. Digamos que decido que la tercera persona de alguna manera hizo trampa al tirar el dado. Así que voy a subíndice m con ay a Y luego, antes del punto y coma, voy a asignar a esa fila el valor de una matriz vacía. Así que abro y cierro los corchetes. Y si ejecuto esa línea, lo que se devuelve al registro es una matriz vacía. Y si paso el cursor sobre m y quieres contar las filas, puedes ver que ahora solo hay nueve filas. Ahora, de nuevo, simplemente jugando con algunas de las cosas que podemos hacer con las matrices, supongamos que las nueve personas restantes cada una de ellas juega el dado por sexta vez. Así que voy a hacer esto en su lugar. Los operadores, tendré m. Y luego el operador de asignación será el Concat Entonces son las barras verticales dobles y un signo igual. Sin espacios, porque no podemos tener espacios entre los componentes de estos operadores que tienen varios caracteres. Y usaré la función j nuevamente. Y solo tenemos nueve filas. Y quiero una columna. Y voy a usar enteros aleatorios nuevamente. Y para sus argumentos, sigue siendo un dado de seis caras, así que lo proporcionaré. Así que esto modificará m en su lugar agregando una sexta columna cuando ejecute esa línea. Y ahí pueden ver que ahora tenemos seis columnas en la matriz. Borremos el registro. Y voy a empezar de nuevo con la asignación de valores a m. Ya no voy a usar números aleatorios. Así que voy a borrar el contenido de la ventana del Editor de secuencias de comandos. Voy a inicializar una variable de contador i y asignarle el valor de Así que ejecutaré eso solo para inicializar eso. Y luego, en una nueva línea, asignaré una matriz diferente a m. Entonces m se le asignará el resultado de la función j. Tendrá cinco filas. Esta matriz tendrá cinco filas, cinco columnas y, a partir de, se incrementará i por cada elemento de la matriz. Así que usaré i plus plus, ese operador de incremento posterior que agrega en su lugar. Y voy a seguir adelante y ejecutar eso. Y entonces tengo una matriz por. Y tenga en cuenta que estamos incrementando por filas, no por columnas. Y eso es importante para otro método de subíndice que veremos aparecer. Así que incrementamos por filas. Ahora, ¿qué pasa si quiero una secuencia que realmente suba a? Bueno, ciertamente hay muchas maneras diferentes de hacer eso. Pero una forma rápida sería simplemente multiplicar cada elemento en la matriz que acabo de crear. Y nuevamente, podemos vectorizar estas operaciones. No tengo que recorrer la matriz. Solo asigno -- y voy a hacer otra asignación en el lugar -- m y luego el asterisco es igual, así que la multiplicación es No tenemos que hacerlo en el lugar. Pero en lugar de crear una nueva variable, lo haré. Entonces, de nuevo, no tengo que hacer un bucle. Va a ir por elementos multiplicando todo por Y ejecuto eso. Y ahí está esa matriz que va de a en incrementos de Ahora, otra forma de crear esta matriz sería en dos pasos, comenzando con la función de índice. Así que voy a borrar lo que hay en la ventana del Editor de secuencias de comandos. Seguiré adelante y borraré el registro también. Y en la ventana del Editor de secuencias de comandos, escribiré m. Y a eso se le asignará el valor que resulte de la función de índice: índice de paréntesis abiertos. Y comenzaremos en Contaremos hasta El tercer argumento opcional, que usaré aquí es el incremento. Así que vamos a pasar Así que aquí está el primer paso para crear esa matriz que teníamos por matriz. Entonces creamos un vector de fila usando la función de índice. Y luego, puedo darle forma a esto. Así que voy a ir a una nueva línea. Voy a sobrescribir m de nuevo. Entonces m será el resultado de la función de forma, que tomará m como su primer argumento y cambiará sus dimensiones para tener cinco filas y cinco columnas. Tienes que tener mucho cuidado con esta función de forma. Si su vector de fila en este caso no coincide con una matriz cuadrada que he especificado aquí, JMP truncará este vector si la matriz que especifica con forma es demasiado pequeña. O si especifica una matriz más grande, simplemente comenzará a repetir el vector. Así que tenga cuidado cuando use la función de forma. Así que quiero ejecutar eso. Y ahí está esa matriz cuadrada de nuevo, yendo de a en incrementos de Now, parte de por qué quería hacer eso, aparte del hecho de que hay muchas formas de hacer todo en JMP por lo general, es hablar de otra forma de subíndice. Hemos visto los subíndices fila por columna. Y quiero hablar sobre el único subíndice que verás a veces. Entonces, si quisiera, podemos usar la función contiene con, lo hemos visto con cadenas de caracteres. Puedes usarlo con listas. Podemos usarlo con matrices. Si quiero encontrar la ubicación del número en la matriz que está actualmente almacenada m, bueno, si estuviera describiendo eso, diría, está bien, es una columna de fila. Así que usaría un subíndice de coma. Pero si le pido a JMP que lo encuentre por mí, entonces voy a usar el archivo contains. Y nuevamente, en la práctica, su secuencia de comandos podría asignar este resultado a una variable. No necesito hacer eso aquí: contiene y luego m coma JMP no me va a dar Me va a dar un solo valor. Bueno, ¿cómo funciona ese valor único? El subíndice de valor único, así que si vuelvo, voy a ir a una nueva línea aquí y escribiré my luego los corchetes con un subíndice de valor único y lo ejecutaré. Eso es El subíndice de valor único tratará mi matriz como si fuera un vector de fila y comenzará a contar desde la primera posición. Entonces, cuando volvamos al registro para ver el resultado de mi función de índice, ese subíndice único lo trata como un vector de fila y cuenta por filas, al igual que incrementamos por filas, para obtener la ubicación de ese valor. Y veremos otros ejemplos cuando trabajemos con matrices más adelante de JMP devolviéndonos ese único subíndice. Lo último que haremos aquí es una especie de cálculo arbitrario para ilustrar que hay funciones que pueden tomar matrices como sus argumentos, funciones computacionales, así que ya hemos visto la función de forma y contiene. Pero voy a avanzar a una nueva línea aquí y escribir log y luego m como su argumento dividido por Y la otra cosa sobre este ejemplo--bueno, déjame ejecutarlo. Y luego les diré la otra cosa sobre el ejemplo. Así que acabo de hacer ese cálculo en cada elemento y lo dividí por Pero la otra cosa que quiero mencionar es que en JSL, las funciones pueden tomar funciones como argumentos. Eso lo veremos a lo largo. Ya hemos visto algunos ejemplos. Entonces, este operador de división, esta es realmente la función de división que toma el logaritmo de m como argumento y luego no necesitaba calcular el logaritmo de m y almacenarlo en una variable para suministrarlo a la función de división. Puedo hacer ese cálculo directamente. Y nuevamente, cómo se vería esto si escribiera la función sería dividir paréntesis abiertos. Reemplace el operador con una coma y cierre los paréntesis. Entonces no tengo que proporcionar una variable que almacene estos valores. Puedo calcularlos mientras ejecuto la función de división. Esos son varios ejemplos de listas y matrices y algunas de las formas en que podemos trabajar con esos tipos particulares de estructuras de datos.