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 <dlamk...@gmail.com> > 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. > > > >