Keine Angst vor der Übergabe großer Variablen als Argument einer Funktion! Es ist nämlich nicht so, dass sich nach Aktivierung der Funktion der Inhalt des Arguments gleich zweimal im Arbeitsspeicher ausbreitet. Statt eine Kopie anzulegen speichert APL nur einen Pointer.
Das spart Platz, aber nur solange bis in der aufgerufenen Funktion das Argument selbst modifiziert wird. Selbst die kleinsten Änderung (z.B. (↑Arg)←0 ) bewirkt eine umgehende Erstellung einer Kopie der ursprünglichen Variablen.
Das Gleiche gilt für ganz einfache Zuweisungen der Form C←B, selbst wenn B bereits nur einen Pointer zu A darstellt. Und was passiert nun mit dieser verpointerten Kette, wenn A bzw. B modifiziert wird?
Es wird nur eine neue Kopie für die zu verändernde Variable erzeugt, sei es A oder B. Der Pointer von C zeigt danach weiterhin auf den vorherigen Speicherbereich.
Als nicht ganz triviale Bemerkung sei noch erwähnt, dass sich APL auch bei B←⍎'A' nicht anders als beschrieben verhält. Eben sparsam, auch wenn der Speicherplatz heute nicht mehr so wertvoll ist wie vor 20, 30 oder 40 Jahren.
Sucht man nach einer Bezeichnung für dieses Vorgehen, so findet man in der Computerei den Begriff "Lazy Evaluation", zu deutsch "verzögerte Auswertung" oder "Bedarfsauswertung". Ein gestrenger Computer-Sprechwissenschaftler würde jetzt wahrscheinlich die Hände über den Kopf zusammenschlagen, aber dieses Konzept beschreibt einigermaßen gut, was die APL-Entwickler bereits früh umgesetzt haben.