Hi,
I thought so, APL is fun:-)
The following 4 expressions are just a repeat:
⍝1 - a vector replicates a scalar. The result is a simple vector
1 2 3/'A'
AAAAAA
⍝2 - scalar by scalar - simple vector as result
1 2 3/'ABC'
ABBCCC
⍝3 - as in ⍝1 but for each scalar a vector replicates a scalar. The
result is a nested vector of simple vectors
(⊂1 2 3)/¨'ABC'
AAAAAA BBBBBB CCCCCC
⍝4 - is consistent with ⍝2 the each-operator introduces one level of depth
1 2 3/¨'ABC'
A BB CCC
The next result would be "surprising" to me as it is somewhere between 2
and 3 and logic asside, "feels" inconsistent:
⍝4
⍝ 1 2 3/¨'ABC'
⍝ AAAAAA BBBBBB CCCCCC
Going a little further. The simple vector 'ABC' is being turned into a
nested vector.
⍝5,6
1 2 3/,¨'ABC'
A B B C C C
1 2 3/∊¨'ABC'
A B B C C C
⍝9 - scalar applied to simple vector
2/'ABC'
AABBCC
2/¨'ABC'
AA BB CC
⍝ 10 - as expected having a nested vector:
2/,¨'ABC'
A A B B C C
Here comes my irritation. Or some missing knowledge ....
⍝ 11 - if this is true ( from ⍝3 )
(⊂1 2 3)/¨'ABC'
AAAAAA BBBBBB CCCCCC
⍝ 12 - then this schould be different
(⊂1 2 3)/¨,¨'ABC'
AAAAAA BBBBBB CCCCCC
⍝ expected
A AA AAA B BB BBB C CC CCC
⍝ 13 - instead of domain error ..
(⊂1 2 3)/'ABC'
DOMAIN ERROR
(⊂1 2 3)/'ABC'
^ ^
⍝ the result could be
AAAAAABBBBBBCCCCCC
⍝ 14 - like in case of a simple vector, the nested vector results are
accordingly:
1 2 3/'AA' 'BB' 'CC'
AA BB BB CC CC CC
⍝like ⍝4
1 2 3/¨'AA' 'BB' 'CC'
AA BBBB CCCCCC
⍝ 15 - and , analogous to 12
(⊂1 2 3)/¨'AA' 'BB' 'CC'
LENGTH ERROR
(⊂1 2 3)/¨'AA' 'BB' 'CC'
^ ^
⍝ could then be
AA AA AA AA AA AA BB BB BB BB BB BB CC CC CC CC CC CC
Just my thoughts..
Best Regards
Hans-Peter
Am 24.11.20 um 17:17 schrieb Dr. Jürgen Sauermann:
Hi Adam,
thanks, see below.
Best Regards,
Jürgen
On 11/23/20 11:07 PM, Adám Brudzewsky wrote:
For the sake of compatibility with IBM APL2
Speaking of which, what is GNU APL's official policy?
GNU APL's general policy regarding standards and the like is to consider,
(in that order):
1. the IBM APL2 language reference manual,
2. the IBM APL2 implementation (PC demo version, can't aford the
commercial version),
3. the ISO standard,
4. other APL implementations and suggestions from bug-apl@gnu.org.
Sometimes, however, this can have undesirable consequences and then
some sort of common sense is applied to change the order.
I noticed that the info manual
(https://www.gnu.org/software/apl/apl.html#APL-symbols-that-can-be-functions-or-operators
<https://www.gnu.org/software/apl/apl.html#APL-symbols-that-can-be-functions-or-operators>)
is factually wrong about APL2, claiming that:
the ambiguity related to / ⌿ \ and ⍀ is not resolved by these rules.
I see. That statement is probably a left-over from the early days of
GNU APL. When I started
with GNU APL, all I had was some vague recollection of APL1 from the
1970s (my first APL
computer was an IBM 5110 desktop, a precursor of the IBM PC). At that
time functions were
functions and values were values. At some later time, triggered by the
⍤-operator (which was
not implemented in IBM APL2 but defined in ISO), I changed to the APL2
way of handling /
and \.
I have updated the documentation, *SVN 1363*.
The APL2 language reference does in fact make it perfectly clear how
/ and friends are treated, namely as operators. Always. Note:
image.png
And then:
image.png
Note that this makes APL2 ISO non-compliant. Indeed, here, GNU APL
follows Dyalog and NARS2000:
1 2 3/¨'ABC'
A BB CCC
While APL2 and APLX give:
1 2 3/¨'ABC'
AAAAAA BBBBBB CCCCCC
This is because 1 2 3/ is a derived monadic function and ¨ maps the
entire function to each letter.
I believe older GNU APL versions would have given the APL2/APL X
results, while newer versions
give the other result. This is one of the examples where the general
GNU APL policy is not being
followed. If an incompatibility with APL2 exists long enough with no
complaints from the users,
then I believe backward compatibility with GNU APL is more important
than compatibility with IBM
APL2.
On Mon, Nov 23, 2020 at 9:21 PM Dr. Jürgen Sauermann
<mail@jürgen-sauermann.de <mailto:mail@j%C3%BCrgen-sauermann.de>> wrote:
Hi Kacper, Adam,
thanks. For the sake of compatibility with IBM APL2 I have
changed *⎕UCS* so that
it accepts float and complex numbers that are near to integers.
My initial thinking was
that e.g.*⎕UCS* of a complex number is most likely a programming
mistake so
that a DOMAIN ERROR would be more helpful than being a burden.
But APL2
compatibility is an even stronger argument in this case.
I have also adjusted the integer domain which is now -$80 ...
$7FFFFFFF
so that no conflicts with signed bytes from *⎕FIO *should arise.
*SVN 1362*.
Best Regards,
Jürgen
On 11/22/20 11:11 PM, Kacper Gutowski wrote:
On Sun, Nov 22, 2020 at 03:19:19PM +0100, Dr. Jürgen Sauermann
wrote:
Floating point and complex numbers are not allowed as to avoid
interference with ⎕CT (i.e. how should rounding be performed?).
I share your sentiment regarding the upper bound of the ⎕UCS
domain, but throwing a domain error on ⎕UCS1E2 looks like a bug
to me too. 1E2 is clearly an integer regardless of the
implementation details, and I would be surprised if APL2 didn't
accept it. I would expect rounding to be the same as in all the
other places that require near-integers, like array indices.
The negative ones are also a bit weird. I wasn't aware of their
existence, and they seem to work in surprising ways when passed
to various variants of ⎕CR.
-k