bug-apl
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Bug-apl] Revisiting the APL 2 empty-array display behavior


From: David B. Lamkins
Subject: Re: [Bug-apl] Revisiting the APL 2 empty-array display behavior
Date: Wed, 28 May 2014 15:57:42 -0700

Yes, it is interesting.

I now understand that ⍎BS/'expr' is an APL 1 idiom that became obsolete
with APL 2.

The APL 2 IDIOMS Library[*] offers this instead:
fn¨BS/⊂A ⍝ Conditional execution of monadic function.

As-is, this is not as general as APL 1's ⍎BS/'expr', but it's still
useful.

With a helper function, one can get the behavior of the APL 1 idiom as
interpreted by APL 2:

      ⎕cr 'ex'
z←ex v
 z←⍎v 
      ex¨0/⊂'⍳5'

      ex¨1/⊂'⍳5'
 1 2 3 4 5 

Finally, to get the original effect of APL 1's 0⍴⍎BS/'expr' :  

      ⎕cr 'qx'
qx v
 v  
      qx¨0/⊂'⍳5'
      qx¨1/⊂'⍳5'
⍳5

I guess I have some APL 1 habits to unlearn... :\

Thanks, Blake, for bringing this up.


[*] APL 2 IDIOMS Library, Stan Cason, IBM, Endicott NY
    ftp://ftp.software.ibm.com/ps/products/apl2/info/APL2IDIOMS.pdf


On Wed, 2014-05-28 at 13:34 -0500, Blake McBride wrote:
> Dear David,
> 
> 
> Interesting observation.  More interesting is how GNU APL correctly
> handles it.  i.e.:
> 
> 
>       ∇test[⎕]∇
>
> [0]   test
> [1]   '1'
> [2]   ⍎0/'test2'
> [3]   '2'
> [4]   ''
> [5]   '3'
> [6]   ⍎1/'test2'
> [7]   '4'
>
>       ∇test2[⎕]∇
>
> [0]   test2
> [1]   'test2'
>
>       test
> 1
> 2
> 
> 
> 3
> test2
> 4
> 
> 
> The problem you bring up, which would be very significant, isn't a
> problem.  I'm uncertain of the logic used, but GNU APL (correctly)
> produces the expected and standard behavior - a behavior that doesn't
> have the problem you mention.
> 
> 
> Am I missing something?
> 
> 
> Thanks.
> 
> 
> Blake
> 
> 
> 
> 
> On Wed, May 28, 2014 at 1:19 PM, David B. Lamkins <address@hidden>
> wrote:
>         Now that I can see how printing '' as CR affects a larger
>         program, I've
>         gotta say that I'm stumped as to how this behavior can be
>         considered
>         usable.
>         
>         Specifically, it's now (unless there's a trick I haven't yet
>         discovered)
>         difficult (see below) to silently (i.e. without affecting the
>         display)
>         execute an arbitrary expression that may, depending upon the
>         expression,
>         return either '' or nothing at all.
>         
>         I dunno... maybe that's not something that anyone else has
>         ever done.
>         
>         But here's an extremely common idiom that breaks badly under
>         the new
>         print behavior:
>         
>               ⍎test/'expression'
>         
>         This is just a conditional execution of an expression. The
>         problem with
>         the new print behavior is that this line will print a CR
>         whenever the
>         test is false. Not OK...
>         
>         If we're going to stick with this new behavior, I can adapt.
>         I've even
>         discovered a (rather tortured-looking) solution to the
>         use-case I posed
>         in the second paragraph:
>         
>         ∇sink v
>          ⍝ Consume value; no display
>
>         
>         sink '0' ⎕ea ',⍎l'
>         
>         On the other hand, it's surprising to me how this new behavior
>         affects
>         so much else.
>         
>         
> 
> 





reply via email to

[Prev in Thread] Current Thread [Next in Thread]