Hi again,
I have done a rework of the EACH operator so that your example
(and similar ones) should work now. SVN 1213.
However, please keep the following in mind: Since
selective specification is not a standard feature (and
quite complicated compared to other functions, there is
still a high probability that some cases were not caught
properly. Your example, for instance, survived for almost
a decade before you discovered it.
For that reason I would recommend that everybody who is
writing business critical applications in GNU APL should
use not-so-standard features only if the benefit that they
provide is significant and make sure that the code is being
tested thoroughly.
Best Regards,
Jürgen
On 12/27/19 12:22 PM, Dr. Jürgen
Sauermann wrote:
Hi David,
your example touches a somewhat dubious area. Its name is
Selective assignment (basically using functions left of ←where
the functions compute what is being assigned),
Selective assignment is defined in APL2 but not in the APL2 ISO
standard (APL2 is named extended APL there).
And even in APL2 there are restrictions (as the IBM APL2
language
reference says: "The information in this section is based on
the APL2 language
definition. Deviations exist on some platforms and are
documented in the
separate user's guides."
GNU APL supports most, but not all, selective specifications
that APL2 does.
The only not supported case that I am aware of is monadic and
dyadic
EACH (¨). The reason is that in GNU APL EACH is a macro (a
defined function
that is only used internally). The syntax error probably comes
because in APL2
selective specification is only allowed for certain primitive
functions left of ← but
not for defined functions.
I will look into this to see if it is feasible to fix it. The
primary reason why macros
were introduced in GNU APL was primitive operators with defined
functions.
Here we only have a primitive operator with primitive functions,
which makes
things a lot simpler.
Best regards,
Jürgen
On 12/27/19 5:37 AM, David Tran
wrote:
Hi,
Currently study APL2, and found an example that won't
work on Gnu APL:
v ← 12(13(14 15))(16 17)
(↑¨v) ← 2 3 6
On the book, above statement will change v into 2 (3 (14
15)) (6 17); however Gnu APL returns Syntax Error.
Is such "first each assignment" not APL2 standard
specification, or it is just Gnu APL is not support yet?
Thanks,
Dave