2012-05-21 19 views
5

¿Cómo se hace uno de los accesos a la matriz en el lenguaje de programación J? Por ejemplo, utilizando C++ como mi idioma pseudocódigo:Arrays en lenguaje de programación J

int M [100]; // declare an array called M 
int j = 5; //index into the array 
int y = 10; //value to store or load from the array 

M[j] = y; // store y into the array 

y = M[j]; // load y from the array 

¿Qué harían este tipo de matriz accesos verá como en idiomática J?

+1

[RosettaCode] (http://rosettacode.org/wiki/Arrays#J) podría ser un mejor foro para este tipo de comparación. – Tikkanz

Respuesta

7

La forma literal (pero todavía bastante idiomática) de escribir esto en J sería la siguiente.

m =: 100 $ 0 NB. This means create a 1d array consisting of 100 zeros. 
j =: 5 
y =: 10 

Con que la inicialización fuera del camino, ahora estamos listos para la carne de la respuesta, que consta de dos usos diferentes de the } adverb ("Item Amend" and "Amend").

m =: y j } m 

Poner dos argumentos a la izquierda de la } provoca J para reemplazar el j ésimo elemento del argumento de la derecha m con el valor y. NOTA: tuvimos que asignar el resultado nuevamente a m porque el resultado de y j } m fue simplemente calcular una nueva matriz que incorporaba el cambio que solicitó utilizando el verbo }.

y =: j } m 

Poner sólo un argumento a la izquierda de la } provoca J extractar el elemento j º de m y devolverlo. En este caso, establecemos y para el resultado.

+0

Tenga en cuenta que la modificación anterior se ejecutará "en su lugar". J reconoce que la nueva matriz se está asignando al mismo nombre y solo escribe los cambios en la nueva matriz. Consulte las http://jsoftware.com/jwiki/Essays/In-Place%20Operations. En mi experiencia, el verbo diádico de http://jsoftware.com/help/dictionary/d520.htm '{' se usa con más frecuencia para recuperar elementos de una matriz. – Tikkanz

+0

Muy buen punto, @Tikkanz. Y gracias por las correcciones en tu edición. – sblom

+0

¡OMG! No tenía idea de modificar '}' tenía la única característica de argumento a la izquierda! Solo uso la toma regular '{' ... – MPelletier

Cuestiones relacionadas