2012-05-21 4 views
5

Wie macht man Array-Zugriffe in der Programmiersprache J? Zum Beispiel mit C++ als meine Pseudo-Code Sprache:Arrays in J Programmiersprache

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 

Was würde diese Art von Array-Zugriffe aussehen wie in idiomatischen J?

+1

[RosettaCode] (http://rosettacode.org/wiki/Arrays#J) könnte ein besseres Forum für diese Art von Vergleich sein. – Tikkanz

Antwort

7

Die wörtliche (aber immer noch ziemlich idiomatische) Art, dies in J zu schreiben, wäre wie folgt.

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

Mit dieser Initialisierung aus dem Weg, jetzt sind wir für das Fleisch der Antwort bereit, die aus zwei unterschiedlichen Verwendungen von the } adverb ("Item Amend" and "Amend") besteht.

m =: y j } m 

Putting zwei Argumente auf der linken Seite des } verursacht J das j te Element des rechten Argument m mit dem Wert y zu ersetzen. HINWEIS: Wir mussten das Ergebnis zurück in m zuweisen, da das Ergebnis von y j } m war, einfach ein neues Array zu berechnen, das die von Ihnen angeforderte Änderung mit dem Verb } enthielt.

y =: j } m 

Putting nur ein Argument links von der } verursacht J das j te Element von m und senden es an exzerpieren. In diesem Fall setzen wir y auf das Ergebnis.

+0

Beachten Sie, dass die obigen Änderungen "vor Ort" ausgeführt werden. J erkennt, dass das neue Array demselben Namen zugewiesen wird, und schreibt nur die Änderungen in das neue Array. Siehe http://jsoftware.com/jwiki/Essays/In-Place%20Operations. Nach meiner Erfahrung wird das dyadische Verb From http://jsoftware.com/help/dictionary/d520.htm '{' häufiger verwendet, um Elemente aus einem Array abzurufen. – Tikkanz

+0

Sehr guter Punkt, @Tikkanz. Und danke für die Korrekturen in deinem Schnitt. – sblom

+0

OMG! Ich hatte keine Idee zu ändern '}' hatte die einzige linke Argument-Funktion! Ich benutze nur die normale Take '{' ... – MPelletier