Hi David,
not sure if it contradicts.
(1) First of all the ISO standard says this about *A f¨ B* and *f¨ B:*
*9.2.6 Each*
...
For both forms:
If B is not empty, Signal domain-error.
...
I believe this is a typo and they mean "if B is empty". Thus according
to the ISO standard +¨'' is undefined.
(2) Then we have the IBM language reference. On page 56, "Fill Function
for Primitive Scalar Functions"
they describe the fill function for scalar *f* (i.e. *+ *in your
example) which, as I read it, always returns
values with numeric *0* for all simple ravel elements.
On page 110, Figure 20 they give a completely different definition of
the fill function for scalar function
as *Z←(R) ≠ (L)*. As far as I can tell, both definitions are equivalent
for dyadic scalar functions, but the
definition on page 110 does not work for monadic scalar functions due to
the lack of *L*. If we fix that by
using *Z←(R) ≠ (R)* for monadic functions then both definitions become
equivalent again.
GNU APL has hopefully implemented the description on page 56.
(3) But then, surprise, in IBM APL2 +¨'' returns:
┌⊖┐
│ │
└─┘
while GNU APL returns:
+¨''
┌⊖┐
│0│
└─┘
My best explanation for this that IBM may have used the same fill
function for + as for user-defined functions.
I feel more comfortable with the written documentation of IBM APL2
because it is rather difficult
to implement things based on what another implementation produces.
/// Jürgen
On 05/15/2014 06:49 PM, David B. Lamkins wrote:
Thank you. Confirmed working with the original test cases.
Pushing a bit further, I believe that the following behavior may still
be contrary to the IBM spec in SVN 268:
+¨''
┌⊖┐
│0│
└─┘
Here we have a numeric function passed an empty character. Transforming
this via the identity given previously, we get the equivalent
expression:
(⍴'')⍴⊂+↑''
DOMAIN ERROR
(⍴'')⍴⊂+↑''
^^
(I don't know whether there's a corresponding case for ⍬. Is there a
primitive monadic function that only accepts character arguments?)