Thanks Jürgen.  Yes, with new ⍬ constant ( value, not function ); it is
consist and no confusion.

On Wed, Dec 25, 2019 at 7:50 AM Dr. Jürgen Sauermann <
mail@jürgen-sauermann.de> wrote:

> Hi,
>
> after some more thinking and considering Elias' comment I have come to the
> conclusion that it is cleaner to parse ⍬ as a constant than as a niladic
> function.
>
> In particular since otherwise ⍬ (the empty numeric vector) and ' ' (the
> empty
> text vector) would bind differently and therefore an unexpected
> inconsistency
> between ' ' and ⍬ would occur.
>
> The new parsing is effective as of *SVN 1212*.
>
> The change only makes a difference in the following situation:
>
> A. There is an APL literal that contains ⍬, and
> B. That literal is the left argument of a dyadic function, and
> C. The literal is not enclosed in parentheses.
>
> For example:
>
>
> *1 ⍬ 3 + 4 *
> If ⍬ is parsed as a niladic function (the old scheme) one gets:
>
>
> *      4⎕CR  1 ⍬ 3 + 4    ⍝ 1 ⍬ 3 + 4  ←→ 1 ⍬ (3 + 4) *┏→━━━━━━┓
> ┃1 ┏⊖┓ 7┃
> ┃  ┃0┃  ┃
> ┃  ┗━┛  ┃
> ┗∊━━━━━━┛
>
>
> If ⍬ is parsed as a constant (which binds stronger to other constants) then
> the new scheme gives:
>
> *      4⎕CR  1 ⍬ 3 + 4    ⍝ 1 ⍬ 3 + 4  ←→ (1 ⍬ 3) + 4*
> ┏→━━━━━━┓
> ┃5 ┏⊖┓ 7┃
> ┃  ┃0┃  ┃
> ┃  ┗━┛  ┃
> ┗∊━━━━━━┛
>
>
> Best Regards,
> Jürgen
>
>
>
> On 12/24/19 4:36 PM, Dr. Jürgen Sauermann wrote:
>
> Hi,
>
> yes. In some sense. Actually
>
> 1 2 X 4
>
> is the same as 1 2 (X) 4
>
> because there is a rule that says so. However, the point here is that
>
> 1 2 X 4
>
> can be (very) different from
>
> (1 2 X 4)
>
> The difference does not occur in simple examples, but may in more complex
> ones.
>
> 1 2 X 4   + 1
>
> is generally different from
>
> (1 2 X 4)   + 1
>
> simply because the order of evaluation differs between X and +. More
> generally, if
> you put the left argument of a dyadic function in parentheses then that
> most likely
> (though not neccessarily) changes the valuation order (and hence the
> result). I know
> that this is odd, but so are niladic functions when it comes to parsing.
> According to
> the IBM APL 2 parentheses rules, the parantheses around (⍬) are redundant
> (and
> make no difference while the parentheses around (⍳0) are *not* redundant.
> As a
> consequence, even though ⍳0 yields essentially ⍬ they are not entirely
> equivalent.
>
> Best Regards,
> Jürgen Sauermann
>
>
> On 12/24/19 3:16 PM, Elias Mårtenson wrote:
>
> I think such a change would make sense. A niladic function is in some
> sense a shortcut to writing a specific value, so it should probably be
> treated as such.
>
> It a little odd that:
>   1 2 X 4
> is different from:
>   1 2 (X) 4
>
> Regards,
> Elias
>
> On Tue, 24 Dec 2019, 14:48 Dr. Jürgen Sauermann, <mail@jürgen-sauermann.de>
> wrote:
>
>> Hi David,
>>
>> not sure either if this is a bug. The APL standard has quite a
>> specification gap
>> when it comes to binding strength. In GNU APL, the binding between values
>> (aka strand notation) is stronger than the binding between values and
>> functions.
>>
>> For example:
>>
>> *      V←⍳0*
>>
>> *∇Z←F*
>> * Z←⍳0*
>> *∇*
>>
>> Both V and F result in the same value *⍬*:
>>
>> *      V≡F*
>> *1*
>>
>> However, they are parsed differently:
>>
>> *      2 V 3⊃a*
>>
>>
>> *3 **      2 F 3⊃a*
>> * 2    99 *
>>
>> In the first case: *2 V 3⊃a* the value *V* binds strongly to 2 and 3 so
>> that value *(2 V 3)*
>>  becomes the left argument of *⊃*. In the second case:  *2 F 3* the
>> value 3 binds
>> stronger to *⊃* than to *F* so that first  is evaluated *3⊃a* and then
>> the result of *⊃* is
>> tied to the *F* and *2*.
>>
>> In GNU APL *⍬* is a niladic function, so it behaves like *F* above.
>>
>> This behaviour could be changed, but I hesitate to do that since it might
>> break
>> existing code. The impact of such a change would not only affect *⍬* but
>> all niladic
>> functions.
>>
>> Best Regards,
>> Jürgen Sauermann
>>
>>
>> On 12/24/19 2:49 AM, David Tran wrote:
>>
>> Ooops, missing something on my examples, correction:  ( missing ⊂ on ⍳3 )
>>
>> a ← 'abc'(⊂⍳3)99
>>
>> the 3 examples are the same:
>> 2(⍳0)3⊃a
>> 2⍬3⊃a
>> (2⍬3)⊃a
>>
>> On Mon, Dec 23, 2019 at 7:20 PM David Tran <email55...@gmail.com> wrote:
>>
>>> Hi,
>>>
>>> Not sure this is a bug or not, for me, (⍳0) ≡ ⍬, so it seems that both
>>> can be replaced each other; consider below example:
>>>
>>> a←'abc'(⍳3)99
>>>
>>> 2(⍳0)3⊃a ⍝ ≡ 3
>>> 2⍬3⊃a ⍝ ≡ 2 ⍬ 99
>>> (2⍬3)⊃a ⍝ ≡ 3
>>>
>>> Doesn't the second example should return 3 as first example, without the
>>> need parentheses as third example?
>>>
>>> (btw. my version is build from SVN around Oct )
>>>
>>>
>>> Thanks,
>>> Dave
>>>
>>>
>>>
>>>
>>
>
>

Reply via email to