Die Liste der dokumentierten Abweichungen zwischen den APL2-Implementierungen auf dem Mainframe und für Workstations ist glücklicherweise recht kurz. Viele der hier dokumentierten Inkompatibiltäten haben mich bisher noch nicht tangiert.
Andere haben es aber in sich und sollten so bald wie möglich aus der Dokumentation verschwinden, so wie auch folgende "Deviation".
Gestern hat mich wieder mal "No fill function is implemented for the Each operator" erwischt, besser gesagt eine Zeile eines vom Mainframe auf einen PC migrierte Funktion. Das Symptom war ein LENGTH ERROR, der Grund war die falsche Behandlung der Anwendung einer Funktion samt Each-Operator auf einen numerischen Leervektor.
Gemäß der reinen Lehre sollte 3↑¨⍳0 einen Leervektor aus dreielementigen numerischen Vektoren ergeben, oder anders ausgedrückt 0⍴⊂3⍴0. Das ist klar, wenn man N in 3↑¨⍳N sukzessive verringert. Stets erhält man einen Vektor der Länge N mit dreielementigen numerischen Vektoren als Elemente. Im Falle N=0 wählt APL2 für Letzteres den Prototyp ↑0⍴3↑¨⍳N, also 3⍴0.
Damit ist 3↑¨⍳N für jedes ganzzahlige nicht-negative N stets ein Vektor aus dreielementigen numerischen Vektoren.
Soweit die reine Lehre. Im Workstation APL2-Leben ist aber nicht alles so einfach. Gemäß User's Guide (S.690) kennt APL2 dort keine Füllfunktion für (3↑) bei Anwendung mit Each auf eine Leerstruktur. Dies führt als Ergebnis des Ausdrucks 3↑¨⍳0 entgegen der Regel zu einem simplen Leervektor der Form ⍳0 und später zu besagtem Längenfehler.
Das war schon recht tückisch.
Ich nehme dies alles als ein weiteres Beispiel für diese Art abweichenden Verhaltens neben dem im User's Guide beschriebenen (↑¨0⍴⊂2 3⍴0).
Ich vergaß ... Wie bringe ich nun Workstation APL2 dazu, mit dem Ausdruck 3↑¨⍳N das zu tun, was die APL-Welt auch für N=0 erwartet? Ganz ohne Änderung geht das natürlich nicht. Aber glücklicherweise ist ken "if N=0 then ... else ..." nöti
Aufgenommen: Feb 11, 21:41
Die meisten Abweichungen zwischen APL2 Versionen für den Mainframe und für Workstations führen bei Ausführung auf einer Workstation umgehend zu einem Fehler. Bei selektiven Zuweisungen wäre das z.B. ein SYNTAX ERROR. So ärgerlich das auch sein mag
Aufgenommen: May 05, 15:18