
Esta demostración analizará algunas de las características básicas de las listas y matrices. Comenzaré con las listas. Abriré una nueva ventana del editor de scripts. El atajo de teclado es Ctrl+T. La redimensionaré y reorganizaré. Colocaré el registro delante del diario. Crearé una variable llamada "mi lista". Asignaré los resultados de la función de lista. Abriré paréntesis con la palabra "lista" y usaré las variables "a" y "b". Calcularé la raíz cuadrada de "sqrt" y "entre paréntesis". Reformatearé los valores para incluir las mayúsculas y el espaciado. Ejecutaré el script. El registro muestra la asignación de una lista con tres elementos. Si paso el cursor sobre la lista, verá que almacena los elementos que ingresé sin evaluar. Entonces son las dos variables y la función raíz cuadrada En una nueva línea en mi ventana del Editor de Scripts, voy a solicitar la evaluación de los elementos en mi lista. Entonces escribiré eval list open parentheses my list. Y ejecutaré solo esa línea. Y entonces ahí veo los resultados evaluados. Ahora, mi lista permanece sin evaluar. Entonces, si quisiera trabajar con los resultados de eval list, una cosa sería asignar el resultado de evaluar la lista a una nueva lista. Sin embargo, hay otras formas en las que podemos usar subíndices para trabajar con elementos evaluados de la lista. Entonces, antes de hablar sobre eso, déjenme hablar sobre subíndices en la lista en general. Entonces, iré a una nueva línea. Y escribiré my list open square brackets. Y escribiré a para extraer el segundo elemento en la lista. Y si ejecuto solo esa línea, lo que veo es el elemento sin evaluar. Entonces, ¿qué pasa si quiero el resultado evaluado? Bueno, en realidad puedo regresar a mi segunda línea aquí. Puedo solicitar la evaluación de mi lista y luego subíndice ese resultado. Así que pondré un corchete abierto, una "a" ahí, y lo cerraré. Y ejecutaré esa línea de nuevo, usando la tecla Intro en el teclado numérico en el extremo derecho del teclado de mi computadora de escritorio. Así que, acabo de subíndice la lista evaluada para obtener ese resultado. Hablamos sobre modificar listas. Así que quiero ir a una nueva línea. Y voy a usar "insertar en". Esto modificará la lista en su lugar. Así que abriré paréntesis. ¿Y qué lista estoy modificando? Bueno, está almacenada en mi lista. Ese es el primer argumento. ¿Qué quiero agregar? Agregaré el nombre John. Es una cadena de caracteres. Y si no pongo la coma ahí ni proporciono el tercer argumento, simplemente lo coloca al final de la lista. Pero voy a tener la coma, y voy a escribir "a" como ese tercer argumento opcional para colocarlo en la segunda posición. Luego, ejecutaré solo esa línea. Insertar en no devuelve nada al registro. Pero si paso el cursor sobre mi lista en cualquier lugar del script, verán que se ha modificado para que el nombre John aparezca en segundo lugar. Supongamos que tengo una lista, quizás devuelta por una función JSL o utilizada para recopilar información del usuario, por ejemplo. Necesito encontrar un elemento en la lista para eliminarlo. Sé que está... bueno, no sé si está en la lista. Primero quiero consultar si está en la lista. Y si lo está, quiero eliminarlo. Así que crearé una variable para almacenar la posición del elemento John. La llamaré pos. Y la asignaré al resultado de la función contains. Hemos visto que la función contains funciona con cadenas de caracteres. Ahora, la función contains funciona con una lista. Buscamos la cadena John en mi lista, y, por supuesto, distinguiremos entre mayúsculas y minúsculas. 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 seguir adelante y escribir remove from open parentheses. Estamos buscando en mi lista. Y quiero en lugar de solo eliminar el último elemento, que es lo que obtendría si no proporciono nada después del primer argumento, voy a usar la variable pos. Y ejecuto esa línea. Y eso devuelve una lista con cualquier número de elementos que se eliminen. De forma predeterminada, tomamos uno comenzando desde la posición especificada en el segundo argumento. Entonces obtengo una lista que tiene esa cadena de caracteres. Y, de hecho, 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 Entonces 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 eso devolvió la cadena de caracteres que no está en la lista. Y si paso el cursor sobre mi lista, podemos ver que ha sido devuelta a su valor anterior. Hablemos un poco sobre matrices. Voy a hacer clic derecho en el registro para borrarlo y luego seleccionaré todo en la ventana del Editor de scripts 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 generarlas con un generador de números aleatorios, pero voy a empezar con un valor de semilla 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. Entonces, voy a usar la función de reinicio aleatorio con un valor de Y, de nuevo, esto solo especifica mi semilla inicial para el generador de números aleatorios. Así que seguiré adelante y lo ejecutaré. 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 donde estamos simulando personas y luego el número de columnas, lanzando un dado de seis caras cinco veces. Y usaré la función de entero aleatorio con los argumentos... comenzaremos en y seleccionaremos números aleatorios hasta Y, de nuevo, puedo reformatear esto solo para que se vea un poco... oops, lo ejecuté en lugar de reformatearlo. Todavía puedo reformatearlo. Listo. Así que también se ejecuta ahora. Y si hacemos el logaritmo un poco más grande, allí pueden ver que tengo esa matriz fila por columna. ¿Y cómo me refiero a los elementos en 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, así que m y luego corchetes. para el número de fila, coma, para el número de columna, cierro el corchete y corro esa línea. Y así la quinta persona en su tercer lanzamiento sacó a Y podemos verificarlo. 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 entera o una columna entera? Bueno, en una nueva línea aquí... de hecho, usaré la misma línea y solo 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, voy a escribir un indicando que no quiero que seleccione ninguna columna en particular. Esto va a ser fila cada columna. Y puedo correr eso. Y eso me da fila todos los valores. Y podríamos, si quieres desplazarte hacia arriba, verificar que esos sean 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 subíndice de 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 en su tirada de dados. Así que voy a subíndice m con a y a Y luego, antes del punto y coma, voy a asignar a esa fila el valor de una matriz vacía. Así que simplemente 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, solo jugando con algunas de las cosas que podemos hacer con las matrices, supongamos que las nueve personas restantes tiran 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á Concat. Son las barras verticales dobles y un signo igual. Sin espacios, porque no podemos tener espacios entre los componentes de estos operadores que tienen múltiples caracteres. Y usaré la función j de nuevo. Y solo tenemos nueve filas. Y quiero una columna. Y voy a usar un entero aleatorio de nuevo. Y para sus argumentos sigue siendo un dado de seis caras, así que proporcionaré Así que esto modificará m en su lugar añadiendo una sexta columna cuando ejecute esa línea. Y entonces ahí pueden ver que ahora tenemos seis columnas en la matriz. Vamos a borrar el registro. Y voy a empezar de nuevo asignando valores a m. Ya no voy a usar números aleatorios. Así que voy a borrar el contenido de la ventana del Editor de scripts. Voy a inicializar una variable de contador i y le asignaré el valor de Así que la ejecutaré solo para inicializarla. Y luego en una nueva línea, asignaré una matriz diferente a m. Entonces a m se le asignará el resultado de la función j. Tendrá cinco filas. Esta matriz tendrá cinco filas, cinco columnas, y comenzando en incrementará i por cada elemento de la matriz. Entonces usaré i más más, ese operador de incremento posterior que suma en el lugar. Y seguiré adelante y lo ejecutaré. Y entonces tengo una matriz por. Y note que estamos incrementando fila por fila, no columna por columna. Y eso es importante para otro método de subíndice que veremos más adelante. Entonces incrementamos fila por fila. Ahora, ¿qué pasa si quiero una secuencia que realmente llega hasta 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 por Y nuevamente, podemos vectorizar estas operaciones. No tengo que recorrer la matriz. Simplemente asigno -- Y voy a hacer otra asignación en el lugar -- m y luego el asterisco es igual, por lo que la multiplicación a No tenemos que hacerlo en el lugar. Pero en lugar de crear una nueva variable, haré eso. Entonces, de nuevo, no tengo que hacer un bucle. Irá multiplicando elemento por elemento. Y ejecuto eso. Y entonces 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. Entonces, voy a borrar lo que está en la ventana del Editor de scripts. Continuaré y borraré el registro también. Y en la ventana del Editor de scripts, voy a escribir m. Y a eso se le asignará el valor que resulta de la función de índice: paréntesis de apertura de índice. Y comenzaremos en Contaremos hasta El tercer argumento opcional, que usaré aquí, es el incremento. Así que iremos por Así que este es el primer paso para crear esa matriz que teníamos la matriz por. Entonces, creamos un vector fila usando la función de índice. Y luego, puedo darle forma. Entonces voy a ir a una nueva línea. Voy a sobrescribir m nuevamente. 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. Debe 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 especificó con forma es demasiado pequeña. O si especifica una matriz más grande, simplemente comenzará a repetir el vector. Así que tenga cuidado al usar la función de forma. Quiero ejecutar esto. Y ahí está esa matriz cuadrada de nuevo, que va de a en incrementos de. Ahora, parte de la razón por la que quería hacer esto, además del hecho de que generalmente hay muchas maneras de hacer todo en JMP, es hablar sobre otra forma de subíndice. Hemos visto los subíndices fila por columna. Y quiero hablar sobre el subíndice simple que verá a veces. Entonces, si quisiera, podemos usar la función contiene con... lo hemos visto con cadenas de caracteres. Puede usarlo con listas. Podemos usarlo con matrices. Si quiero encontrar la ubicación del número en la matriz que actualmente está almacenado m, bueno, si estuviera describiendo eso diría, OK, es fila columna Entonces usaría un subíndice de coma. Pero si le pidiera a JMP que lo encontrara por mí, así que solo usaré el contiene. Y de nuevo, en la práctica, su script 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 volviera, iría a una nueva línea aquí y escribiría m y luego los corchetes con un subíndice de valor único y lo ejecutaría. 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 revisamos el registro para ver el resultado de mi función de índice, ese subíndice único lo trata como un vector de fila y cuenta fila por fila, tal como lo incrementamos, para obtener la ubicación de ese valor. Veremos otros ejemplos cuando trabajemos con matrices más adelante, donde JMP nos devuelve ese subíndice único. Lo último que haremos aquí es un cálculo arbitrario para ilustrar que hay funciones que pueden tomar matrices como argumentos, funciones computacionales. Ya vimos las funciones de forma y contiene. Pero voy a pasar a una nueva línea y escribiré "log" y luego "m" como argumento, dividido por. Y lo otro sobre este ejemplo... bueno, déjenme ejecutarlo. Y luego les contaré lo otro sobre el ejemplo. Acabo de realizar ese cálculo en cada elemento y lo dividí por. Pero lo otro que quiero mencionar es que en JSL, las funciones pueden tomar funciones como argumentos. Lo veremos a lo largo del artículo. Ya hemos visto algunos ejemplos. Este operador de división es la función de división que toma el logaritmo de m como argumento. No necesito calcular el logaritmo de m ni almacenarlo en una variable para proporcionárselo a la función de división. Puedo realizar ese cálculo directamente. Si escribiera la función, esto se vería así: abrir paréntesis de división. Reemplace el operador con una coma y cerrar paréntesis. Así, no tengo que proporcionar una variable que almacene estos valores. Puedo calcularlos mientras ejecuto la función de división. Estos son varios ejemplos de listas y matrices, y algunas maneras de trabajar con esos tipos particulares de estructuras de datos.